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

时间:2018-04-25 10:47:58

标签: java android interop flutter

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

我想使用第三方Java SDK(适用于AWS Cognito)。我可以将这个库放在<section> <div class="leftColumn"> <div class="content"> Numb1 </div> <div class="content"> Numb2 </div> </div> <div class="content"> Numb3 </div> </section>的某个地方,并与之交互吗?如果是这样,我该怎么做?

3 个答案:

答案 0 :(得分:3)

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

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

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

pluginproject / android / src / main / java / com / yourcompany ... / ...中用Java(或Kotlin)实现特定于Android的代码/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'])

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

我不确定为什么不可能把第三方罐子放在 pluginproject / android / lib中,但这会导致我的dex错误,而将它们留在 pluginproject /文件夹可以正常工作。

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

答案 1 :(得分:2)

是的。

  

您可以在其上看到documentation,也可以根据需要查看   tutorial。如果您使用的SDK可以帮助您   适用于Android和iOS的本地代码,否则将很困难。   祝你好运!

答案 2 :(得分:1)

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

除非你已经这样做并且有一个管理罐子的系统,我不建议直接将jar文件复制到你的项目中。因此源控制。

相反,请使用gradle的内置依赖项解析。您应该可以关注Amazon's android sdk set-up directions。不同之处在于,您必须通过方法渠道连接到SDK的调用,并编写自己的互操作代码。