使用 Platform Channels 在 Flutter 中调用原生库

Calling native libraries in Flutter using Platform Channels

使用platform channels,Flutter 可以与原生平台互操作(即读取电池电量)。在 Android 上,这需要调用 Java 方法。

我想使用第三方 Java SDK(适用于 AWS Cognito)。我可以将此库放在我的 /android 中的某个位置并与之交互吗?如果可以,我该怎么做?

如果您还没有启动插件项目,请创建一个。

在某处收集第三方 jar - 不要将它们放在 pluginproject/android/... 文件夹中。

在您的 IDE 中打开插件项目 - 在我的例子中是 IDEA - 并将第三方 jar 添加到 Java 类路径。 (在 IDEA 中,点击 Project Structure / Modules / select pluginName_android / Dependencies tab / green PlusSign / jars or directories - and select 单个 jar 或整个文件夹。将范围保留为编译并且不检查导出。)

pluginproject/android/src/main/java/[= 的 Java(或 Kotlin)中实现您的 android 特定代码49=].../.../PluginnamePlugin.java,您现在可以在其中使用由第三方罐子。

将依赖项添加到 gradle 以便编译。在 pluginproject/android/build.gradle 中(注意 - 有几个 build.gradles)在末尾添加这个 - 在 android {} 之后节

dependencies {
    implementation files('../../../java/someapi/somejar.jar')
}

路径必须相对于 pluginproject/android 文件夹。您可以改为使用此语法指定整个文件夹

implementation fileTree(dir: '../../../somewhere/somefolder', include: ['*.jar'])

运行插件项目中提供的示例应用程序。

我不确定为什么不能将第三方 jar 放入 pluginproject/android/lib,但这会导致我出现 dex 错误,然而,将它们留在 pluginproject/ 文件夹之外是可行的。

我只使用过性能良好的第三方 jar(没有 JNI,不创建自己的线程等)。

flutter 的 Android 端使用 Gradle(与任何其他 android 项目相同)。如果您有一个现有的 android 应用程序,您可能可以移植 gradle 文件中的大部分相同设置。

除非您已经这样做并且拥有管理 jar 的系统,否则 我不建议 将 jar 文件直接复制到您的项目和源代码控制中。

而是使用 gradle 的内置依赖项解析。您应该可以关注 Amazon's android sdk set-up directions。区别在于您必须通过方法通道连接对 SDK 的调用并编写您自己的互操作代码。

可以。

You can see the documentation on that or if you want you can see tutorial. It is helpful if you are using SDK that gives you native code for both Android and iOS, otherwise it will be difficult. Good luck!