跳至主要內容

Java 互操作使用 package:jnigen

Dart Native 平台上運行的 Dart 行動裝置、命令列和伺服器應用程式,在 Android、Windows、macOS 和 Linux 上可以使用 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 的公用靜態方法

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

在本範例中,這會產生 lib/example.dart,正如您在 jnigen.yaml 中指定的那樣。

此檔案包含一個名為 Example 的類別,其中有一個名為 sum 的靜態方法,就像 Java 檔案一樣。

使用綁定

#

現在您已準備好載入並與產生的函式庫互動。範例應用程式 bin/sum.dart 取得兩個數字作為引數並印出它們的總和。使用 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_java示範如何在 Flutter 應用程式中包含自訂 Java 程式碼,並使用 jnigen 呼叫它。
pdfbox_pluginFlutter 外掛程式的範例,該外掛程式提供與 Apache PDFBox 函式庫的綁定。
notification_plugin可重複使用的 Flutter 外掛程式範例,其中包含使用 Android 函式庫的自訂 Java 程式碼。