使用平台通道在Flutter中调用本机库

haz*_*haz 7 java android interop flutter

使用平台通道,Flutter可以与本机平台互操作(即读取电池电量).在Android上,这需要调用Java方法.

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

goo*_*s17 11

是的你可以。

您可以查看相关文档,或者如果您愿意,可以查看 教程。如果您使用的 SDK 为您提供适用于 Android 和 iOS 的本机代码,这会很有帮助,否则会很困难。祝你好运!


Ric*_*eap 5

如果尚未启动插件项目,请创建一个。

在某个地方收集第三方罐子-不要将它们放在pluginproject / android / ...文件夹中。

在您的IDE中打开插件项目(在我的示例中为IDEA),然后将第三方jar添加到Java类路径中。(在IDEA中,单击项目结构/模块/选择pluginName _android / Dependencies选项卡/绿色PlusSign / jar或目录-并选择单个jar或整个文件夹。将范围保留为可编译状态,而不检查导出。)

pluginproject / android / src / main / java / com / yourcompany ... / ... / Pluginname Plugin.java中以Java(或Kotlin)实现您的android特定代码。您现在可以在其中使用声明的类由第三方罐子。

将依赖项添加到gradle中,以便进行编译。在pluginproject /android/build.gradle中(注意-有多个build.gradles),在android {}部分之后添加此内容

dependencies {
    implementation files('../../../java/someapi/somejar.jar')
}
Run Code Online (Sandbox Code Playgroud)

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

implementation fileTree(dir: '../../../somewhere/somefolder', include: ['*.jar'])
Run Code Online (Sandbox Code Playgroud)

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

我不确定为什么不能将第三方jar放入例如pluginproject / android / lib,但这对我造成了dex错误,而将它们放在pluginproject /文件夹之外是可行的

我只使用过行为良好的第三方jar(没有JNI,请勿创建自己的线程等)。