メインコンテンツにスキップ

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 を使用する例を説明します。

前提条件

#

jnigen の設定

#

まず、package:jni を依存関係として、package:jnigen開発依存関係として追加します。

dart pub add jni dev:jnigen

次に、jnigen.yaml という名前のトップレベルファイルを作成します。このファイルには、バインディング生成の設定が含まれています。

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 を持つ非常に簡単なクラスが含まれています。

java
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 とまったく同じです。

dart
// 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 25

42 という出力が表示されます。

その他の例

#

以下に、package:jnigen を使用する、より包括的な例をいくつか示します。

説明
in_app_javaFlutter アプリケーションにカスタム Java コードを組み込み、jnigen を使用して呼び出す方法を示しています。
pdfbox_pluginApache PDFBox ライブラリへのバインディングを提供する Flutter プラグインの例。
notification_pluginAndroid ライブラリを使用するカスタム Java コードを備えた再利用可能な Flutter プラグインの例。