Java Native Interface(JNI)の使用を開始する

Getting Started With Java Native Interface



Java Native Interface(略してJNI)は、Java開発者がJavaの他のプログラミング言語からコードやスニペットを実行できるようにするプログラミングインターフェイスです。これは、必須のJavaソフトウェア開発キット(SDK)と組み合わされています(これについては別のチュートリアルで説明します)。

JNIは、JavaアプリケーションのJava仮想マシンに忍び込むためにAPIを呼び出す機能も高く評価されています。これにより、開発者はネイティブアプリケーションのコード内でJavaコードを呼び出すことができます。







Javaの使用に時間を費やしたことがある場合は、必然的に発生する多くのパフォーマンスの問題にすでに遭遇している可能性があります。同じコードを母国語で実行する場合、これは問題ではありません。母国語は、コンパイルされたモデルで読み取ると18倍以上高速に実行できます。それに加えて、他の言語のネイティブコードで古い/互換性のないハードウェアルーチンを使用することもできます。



このチュートリアルでは、Javaアプリケーション内からマシンのC / C ++コードを呼び出す方法を示します。



前提条件

このガイドを正しく実行するには、いくつかのことが必要になります。これらには、JavaコンパイラまたはJavac.exe、JVM、およびネイティブメソッドCジェネレータ(javah.exe)が含まれます。これら3つはすべてソフトウェア開発キットに組み込まれているため、それがあれば問題ありません。これら3つに加えて、ネイティブヘッダーファイルや完全なライブラリファイルなど、JNIを定義するファイルも必要になります。





もちろん、CコードとC ++コードの実行に関するチュートリアルでは、Cコンパイラを使用して共有ライブラリを作成します。

JNIコンポーネント

JNIは、主にhとjavahの2つのコンポーネントによって駆動されます。 HはネイティブコードをJavaコードに置き換えるヘッダーファイルコンポーネントですが、Javahは、このファイルをアプリのヘッダーファイルに単独でロードできるようにします。



JavaコードからのC / C ++の呼び出し

ステップ1:Javaでコードを書く

コードは最初にJavaで記述され、3つの条件に準拠しています。まず、後で呼び出されるネイティブメソッドを使用して記述されます。次に、ネイティブコードが含まれている共有ライブラリをロードする必要があり、最後に、ネイティブメソッドを呼び出す必要があります。

このコードを使用して、さらに説明しましょう。

3行目と6行目に注意してください。これらは、ネイティブメソッドが含まれている行です。共有ライブラリをロードするコードは10行目にあり、12行目から15行目でメソッドが呼び出されます。

ステップ2:Javaコードをバイトコードにコンパイルする

2番目のステップは、Javaコードのコンパイルに関係しています。 javacコンパイラはここで私たちのために仕事をすることができます。以下のコマンドを発行するだけです。

$ javacの例1。java

ステップ3:C / C ++ヘッダーファイルを作成する

次に、母国語のヘッダーファイルを作成する必要があります。このヘッダーファイルは、ネイティブコードの署名を強化します。

これらのヘッダーファイルは、次のコマンドを使用して、SDKにバンドルされているCスタブジェネレーターであるjavahネイティブツールで作成できます。

javah Example1

次の出力が返されます。

ステップ4:ネイティブコードを書く

ここでC / C ++コードを記述します。手順1で行った宣言に類似している必要があるすべての署名に注意する必要があります。

以下は、C言語で記述された実装です。

ステップ5:共有ライブラリを作成する

共有ライブラリは、任意のコンパイラで作成できます。共有ライブラリにはネイティブコードが含まれているため、作成する必要があります。

ステップ6:プログラムを起動します

このステップでは、コードを評価し、プログラムの問題を特定します。コードは主にJVMで実行されるため、これにはJavaランタイム環境が関係します。

次のコマンドを発行します。

java Example1

それは戻るはずです:

これが、Java NativeInterfaceを使用するための短い初心者向けガイドです。お役に立てば幸いです。

JNIの操作方法を学ぶことは、Javaアプリケーション、特にスマートフォン用のAndroidアプリケーションを開発したい人にとって不可欠です。