如何在 flutter 包中使用原生 C 库

How to use native C library in flutter package

我有一个用 C 编写的库,我以前通过 JNI 从 java android 应用程序中使用过它。

我现在转而使用 flutter,计划制作一个包装 C 库的 flutter 包。

包的 flutter 项目已经创建,计划使用平台通道(invokeMethod 调用一些简单的 Java 方法来调用库的 JNI。我想我已经实现了大部分.

问题是,我通常会将有关库和 JNI 存在的信息添加到我的 android java 项目的 build.gradle 中。但是,当我在 flutter 包的结构中工作时,我找不到这些文件。如果我改为构建一个标准的 flutter 项目(一个带有 UI 的应用程序),我突然有了 build.gradle 文件。

如何添加这些 gradle 文件,或者我应该将有关 lib/JNI 的信息添加到其他一些特定于 flutter 的文件中? 多层 dart->platformChannel -> java -> jni -> C 库 aproach 听起来像是正确的做法吗?或者有更好的方法吗?

您确定您创建了 Flutter 插件项目(不是包)吗?插件是一种包含Dart/Kotlin(或Java)/Swift(或Obj-C)代码实现Flutter-native层的包,加上一个练习和演示插件使用的示例应用程序。

一个Flutter插件有3个build.gradle个文件:

  1. ./android/build.grade 设置插件的最小 SDK、依赖项等的地方
  2. ./example/android/build.grade 一般保持不变
  3. ./example/android/app/build.gradle 这是您为示例应用设置内容的地方

您对 (1) 所做的任何更改冒泡到示例应用程序(这只是一个使用您的插件的示例应用程序)。同样,当您在其他应用程序中使用该插件时,该应用程序只会从您的插件中获取 (1)。

将您的依赖项添加到 (1)。