パッケージ:jnigen を使用した Java インターオペレーション
Android、Windows、macOS、Linux 上のDart ネイティブプラットフォームで実行される 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
という public static メソッドを持つ非常に単純なクラスが含まれています。
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 25
出力は42
です!
その他の例
#以下は、package:jnigen
を使用するより包括的な例です。
例 | 説明 |
---|---|
in_app_java | Flutter アプリケーションにカスタム Java コードを含めて、jnigen を使用して呼び出す方法を示します。 |
pdfbox_plugin | Apache PDFBox ライブラリへのバインディングを提供する Flutter プラグインの例です。 |
notification_plugin | Android ライブラリを使用するカスタム Java コードを含む、再利用可能な Flutter プラグインの例です。 |
特に記載がない限り、このサイトのドキュメントは Dart 3.5.3 を反映しています。ページは 2024年5月22日に最終更新されました。 ソースを表示 または 問題を報告する。