首页 > 解决方案 > 如何捆绑flutter ffi插件

问题描述

我正在为颤振编写 uber h3 插件。我有可用的源代码,但更精确地创建包时遇到问题 我在捆绑 libh3.so 时遇到问题

快速概览:

  1. 有下载的uber h3 c源代码。download_deps.sh
  2. 然后 android/build.gradle 有构建命令
    externalNativeBuild {
        cmake {
            path "../ios/CMakeLists.txt"
        }
    }
  1. 然后 example/lib/main.dart 有一些初始化代码。
  initializeH3((String name) => Platform.isAndroid
      ? DynamicLibrary.open("lib${name}.so")
      : DynamicLibrary.process());

但是当我尝试构建它时找不到库文件。-我尝试了不同的位置。似乎库本机 .so 未捆绑到应用程序中

但我不知道为什么

根据教程https://flutter.dev/docs/development/platform-integration/c-interop 它应该被捆绑。

这是源代码https://github.com/fmatuszewski/h3

标签: flutterdartpackageffi

解决方案


我已经设法让它运行,它的pubspec.yaml格式不正确并且需要:

flutter:
  plugin:
    platforms:
      android:
        package: com.example.h3
        pluginClass: H3Plugin
      ios:
        pluginClass: H3Plugin

最后加入。

在这样做时,包裹已正确连接。

libh3.so需要添加到android/src/main/jniLibs自然附加但是我也移动了代码:

final DynamicLibrary h3 = Platform.isAndroid
        ? DynamicLibrary.open("libh3.so")
        : DynamicLibrary.process();

返回h3.dart并删除main.dart以使其运行。

我认为这些是让代码运行的主要问题。由于我是插件新手,所以我在找出问题所在时遇到了问题 - 所以坐下来解决所有问题是一个漫长的过程。在这样做的过程中,我最终重新编写了所有代码以了解发生了什么。如果这些点都不起作用,或者您想查看工作代码,请告诉我,我可以将其上传到 Github。


推荐阅读