目次

パッケージ:jnigen を使用した Java インターオペレーション

Android、Windows、macOS、Linux 上のDart ネイティブプラットフォームで実行される Dart モバイル、コマンドライン、およびサーバーアプリは、package:jnipackage: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 という public static メソッドを持つ非常に単純なクラスが含まれています。

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 プラグインの例です。