使用 package:jnigen 的 Java 互操作
在 Android、Windows、macOS 和 Linux 上,於 Dart Native 平台執行的 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
在本範例中,這會產生 lib/example.dart,正如您在 jnigen.yaml
中指定的一樣。
此檔案包含一個名為 Example
的類別,其中有一個名為 sum
的靜態方法,就像 Java 檔案一樣。
使用繫結
#現在您已準備好載入並與產生的函式庫互動。範例應用程式 bin/sum.dart 會取得兩個數字作為引數並列印它們的總和。使用 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 | 具有自訂 Java 程式碼且使用 Android 函式庫的可重複使用 Flutter 外掛程式範例。 |
除非另有說明,否則本網站的文件反映 Dart 3.6.0。頁面最後更新於 2024-05-22。 檢視原始碼 或回報問題。