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

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

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

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

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

在IDE中打开插件项目 – 在我的案例中是IDEA – 并将第三方jar添加到Java类路径中。 (在IDEA中,单击Project Structure / Modules /选择pluginName _android / Dependencies选项卡/ green PlusSign / jars或目录 – 并选择单个jar或整个文件夹。将范围保留为编译,不要检查导出。)

pluginproject / android / src / main / java / com / yourcompany … / … / Pluginname Plugin.java中用Java(或Kotlin)实现你的特定于android的代码,你现在可以在这里使用声明的类由第三方jar子。

将依赖项添加到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子放在插件项目 / android / lib中,但是这会导致我的dex错误,而将它们留在pluginproject /文件夹之外。

我只使用过乖巧的第三方jar子(没有JNI,不创建自己的Threads等)。

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

除非你已经这样做并且有一个用于管理jar的系统,否则我不建议将jar文件直接复制到你的项目中,因此也就是源代码控制。

相反,使用gradle的内置依赖项解析。 你应该能够关注亚马逊的android sdk设置方向 。 不同之处在于您必须通过方法通道连接到SDK的调用并编写自己的互操作代码。

是的你可以。

您可以在此处查看文档 ,或者如果您希望可以查看教程 。 如果您使用SDK为Android和iOS提供本机代码会很有帮助,否则会很困难。 祝你好运!