【发布时间】:2018-10-05 19:36:18
【问题描述】:
使用platform channels,Flutter 可以与原生平台互操作(即读取电池电量)。在 Android 上,这需要调用 Java 方法。
我想使用第三方 Java 开发工具包(适用于 AWS Cognito)。我可以把这个库放在我的/android 的某个地方,并与之交互吗?如果是这样,我该怎么做?
【问题讨论】:
标签: java android interop flutter
使用platform channels,Flutter 可以与原生平台互操作(即读取电池电量)。在 Android 上,这需要调用 Java 方法。
我想使用第三方 Java 开发工具包(适用于 AWS Cognito)。我可以把这个库放在我的/android 的某个地方,并与之交互吗?如果是这样,我该怎么做?
【问题讨论】:
标签: java android interop flutter
是的,你可以。
您可以在上面看到documentation,或者如果您愿意,您可以看到 tutorial。如果您使用的 SDK 可以为您提供 Android 和 iOS 的原生代码,否则会很困难。 祝你好运!
【讨论】:
如果您还没有启动插件项目,请创建一个。
在某处收集第三方 jar - 不要将它们放在 pluginproject/android/... 文件夹中。
在您的 IDE 中打开插件项目 - 在我的例子中是 IDEA - 并将第三方 jars 添加到 Java 类路径中。 (在 IDEA 中,单击 Project Structure / Modules / 选择 pluginName_android / Dependencies 选项卡 / 绿色 PlusSign / jars 或目录 - 并选择单个 jars 或整个文件夹。将范围保留为 compile 并且不要检查导出。)
在 pluginproject/android/src/main/java/com/yourcompany.../... 中用 Java(或 Kotlin)实现您的 android 特定代码/PluginnamePlugin.java,您现在可以在其中使用第三方 jar 声明的类。
将依赖项添加到 gradle 以便它可以编译。在 pluginproject/android/build.gradle 中(注意 - 有几个 build.gradle)在最后添加这个 - 在 android {} 部分之后
dependencies {
implementation files('../../../java/someapi/somejar.jar')
}
路径必须相对于 pluginproject/android 文件夹。您可以改为使用此语法指定整个文件夹
implementation fileTree(dir: '../../../somewhere/somefolder', include: ['*.jar'])
运行插件项目中提供的示例应用程序。
我不确定为什么不能将第三方 jars 放入,例如 pluginproject/android/lib,但这会导致我的 dex 错误,而将它们留在外面pluginproject/ 文件夹有效。
我只使用过行为良好的第三方 jar(没有 JNI,不创建自己的线程等)。
【讨论】:
flutter 的 Android 端使用 Gradle(与任何其他 android 项目相同)。如果你有一个现有的 android 应用程序,你可能可以从你的 gradle 文件中移植大部分相同的设置。
除非您已经这样做并且拥有管理 jar 的系统,否则我不建议将 jar 文件直接复制到您的项目中并因此进行源代码管理。
改为使用 gradle 的内置依赖解析。你应该可以关注Amazon's android sdk set-up directions。不同之处在于您必须通过方法通道连接对 SDK 的调用并编写自己的互操作代码。
【讨论】: