AndroidでJNIを呼び出す手順は次のとおりです。
Androidでは、Java Native Interface(JNI)によってJavaコードとネイティブコード(通常はCまたはC++)を連携させることが可能になります。JNIの呼び出し処理は、次のとおりです。
- ネイティブコードの作成: まず、CまたはC++でネイティブコードを作成し、動的リンクライブラリ(.soファイル)にコンパイルする必要があります。
- ネイティブメソッドを宣言する:Javaコードの中で、呼び出されるネイティブメソッドをネイティブキーワードで宣言します。ネイティブメソッドの宣言は、実際のネイティブコードに対応します。
- ネイティブメソッドの宣言を含んだ、Java クラスのヘッダファイルを生成する:Java Development Kit(JDK)内の javah ツールを使用して生成する。
- ネイティブコードでJNI関数をインプリメントします。 JNI関数はJavaのデータ型をネイティブのデータ型に変換し、ネイティブコードで対応するロジックを実行する専用関数です。
- 動的リンクライブラリの読み込み: Javaコードでは、System.loadLibrary()メソッドを使用して、動的リンクライブラリを読み込みます。読み込み後は、Java仮想マシンがネイティブメソッドを検索し、呼び出すことができます。
- ネイティブメソッド呼び出し: Javaコードでネイティブメソッドを呼び出すと、実際にはJNI関数が呼び出され、JNI関数はネイティブコードを呼び出します。
- ネイティブコードの実行: JNI 関数は、ネイティブメソッドが呼び出されたときに Java データ型をネイティブデータ型に変換し、ネイティブコードに渡して対応するロジックを実行します。
- JNI関数を使って、ネイティブコードを実行した結果をJavaコードに返します。
JNIの呼び出しでは、Javaとネイティブコードでデータ型が異なるためデータ型の変換が必要となります。JNIには、Java文字列をC文字列に変換する、Java配列をC配列に変換するなど、データ型の変換に使用する関数があります。また、JNIでは例外処理やスレッド操作などの機能に使用する関数も提供されています。