目录

使用 package:jnigen 进行 Java 互操作

在 Android、Windows、macOS 和 Linux 上运行的 Dart Native 平台上的 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 的公共静态方法

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_plugin提供 Apache PDFBox 库绑定的 Flutter 插件示例。
notification_plugin具有使用 Android 库的自定义 Java 代码的可重用 Flutter 插件示例。