使用 Platform Channels 在 Flutter 中调用原生库
Posted
技术标签:
【中文标题】使用 Platform Channels 在 Flutter 中调用原生库【英文标题】:Calling native libraries in Flutter using Platform Channels 【发布时间】:2018-10-05 19:36:18 【问题描述】:使用platform channels,Flutter 可以与原生平台互操作(即读取电池电量)。在 android 上,这需要调用 Java 方法。
我想使用第三方 Java 开发工具包(适用于 AWS Cognito)。我可以把这个库放在我的/android
的某个地方,并与之交互吗?如果是这样,我该怎么做?
【问题讨论】:
【参考方案1】:是的,你可以。
您可以在上面看到documentation,或者如果您愿意,您可以看到 tutorial。如果您使用的 SDK 可以为您提供 Android 和 ios 的原生代码,否则会很困难。 祝你好运!
【讨论】:
谢谢!非常有帮助,应该是公认的答案【参考方案2】:如果您还没有启动插件项目,请创建一个。
在某处收集第三方 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,不创建自己的线程等)。
【讨论】:
除非我将依赖项添加到 android/app/build.gradle 而不是 android/build.gradle,否则我没有让实现工作 您好,请问您可以为此制作视频吗?我想使用 iText,但我不清楚 :(【参考方案3】:flutter 的 Android 端使用 Gradle(与任何其他 android 项目相同)。如果你有一个现有的 android 应用程序,你可能可以从你的 gradle 文件中移植大部分相同的设置。
除非您已经这样做并且拥有管理 jar 的系统,否则我不建议将 jar 文件直接复制到您的项目中并因此进行源代码管理。
改为使用 gradle 的内置依赖解析。你应该可以关注Amazon's android sdk set-up directions。不同之处在于您必须通过方法通道连接对 SDK 的调用并编写自己的互操作代码。
【讨论】:
以上是关于使用 Platform Channels 在 Flutter 中调用原生库的主要内容,如果未能解决你的问题,请参考以下文章
Django Channels 是不是使用 ws:// 协议前缀在 Django 视图或 Channels 应用程序之间进行路由?