package:jnigen を使用した Java 相互運用
Dart Native プラットフォーム、Android、Windows、macOS、Linux で実行される Dart モバイル、コマンドライン、サーバーアプリは、package:jni および package:jnigen を使用して Java および Kotlin API を呼び出すことができます。
package:jni は、Dart コードが JNI を介して Java と対話できるようにします。ただし、これには多くの定型コードが必要になるため、package:jnigen を使用して、指定された Java API の Dart バインディングを自動生成できます。
Kotlin を Java バイトコードにコンパイルできるため、package:jnigen は Kotlin のバインディングも生成できます。
簡単な Java の例
#このガイドでは、簡単なクラスのバインディングを生成するために package:jnigen を使用する例を説明します。
前提条件
#- JDK
- Maven
jnigen の設定
#まず、package:jni を依存関係として、package:jnigen を 開発依存関係として追加します。
dart pub add jni dev:jnigen次に、jnigen.yaml という名前のトップレベルファイルを作成します。このファイルには、バインディング生成の設定が含まれています。
output:
  dart:
    path: lib/example.dart
    structure: single_file
source_path:
  - 'java/'
classes:
  - 'dev.dart.Example'path は、生成される dart バインディングのパスを指定します。
source_path は、バインディングを生成したい Java ソースファイルのパスを指定し、classes は Java クラスを指定します。
java/dev/dart/Example.java には、公開静的メソッド sum を持つ非常に簡単なクラスが含まれています。
package dev.dart;
public class Example {
  public static int sum(int a, int b) {
    return a + b;
  }
}Dart バインディングの生成
#Dart バインディングを生成するには、jnigen を実行し、--config オプションを使用して設定ファイルを指定します。
dart run jnigen --config jnigen.yamlこの例では、jnigen.yaml で指定したとおりに、lib/example.dart が生成されます。
このファイルには、Java ファイルと同様に、静的メソッド sum を持つ Example という名前のクラスが含まれています。
バインディングの使用
#これで、生成されたライブラリをロードして対話する準備ができました。例のアプリ bin/sum.dart は、2 つの数値を引数として受け取り、その合計を印刷します。Example.sum メソッドの使用は Java とまったく同じです。
// a and b are integer arguments
print(Example.sum(a, b));例の実行
#例を実行する前に、jni の動的ライブラリをビルドする必要があります。Java ソースもコンパイルする必要があります。これを行うには、次を実行します。
dart run jni:setup
javac java/dev/dart/Example.javaこれで例を実行できます。
dart run jnigen_example:sum 17 2542 という出力が表示されます。
その他の例
#以下に、package:jnigen を使用する、より包括的な例をいくつか示します。
| 例 | 説明 | 
|---|---|
| in_app_java | Flutter アプリケーションにカスタム Java コードを組み込み、 jnigenを使用して呼び出す方法を示しています。 | 
| pdfbox_plugin | Apache PDFBox ライブラリへのバインディングを提供する Flutter プラグインの例。 | 
| notification_plugin | Android ライブラリを使用するカスタム Java コードを備えた再利用可能な Flutter プラグインの例。 |