Android 上使用 dart:ffi 调用本地代码 |
您所在的位置:网站首页 › c程序打包apk › Android 上使用 dart:ffi 调用本地代码 |
Android 上使用 dart:ffi 调用本地代码
Contents
动态链接 vs 静态链接 步骤 1:创建插件 步骤 2:添加 C/C++ 源码 步骤 3:在 FFI 库中读取代码 其他的用例 平台库 第一方库 开源三方库 闭源三方库 Android APK 尺寸(共享对象压缩) Flutter 移动版可以使用 dart:ffi 库来调用本地的 C API。 FFI 代表 外部功能接口。类似功能的其他术语包括本地接口和语言绑定。 提示 本文描述的是在 Android 应用中使用 dart:ffi 库。你可以阅读 在 iOS 中使用 dart:ffi 调用本地代码 或 在 macOS 中使用 dart:ffi 调用本地代码。 Web 插件暂不支持调用本地代码。 你必须首先确保本地代码已加载,并且其符号对 Dart 可见,然后才能在库或程序使用 FFI 库绑定本地代码。本页主要介绍如何在 Flutter 插件或应用程序中编译、打包和加载本地代码。 本教程演示了如何在 Flutter 插件中捆绑 C/C++ 源代码,并使用 Android 和 iOS 上的 Dart FFI 库绑定它们。在本示例中,你将创建一个实现 32 位的加法 C 函数,然后通过名为 “native_add” 的 Dart 插件暴露它。 动态链接 vs 静态链接本地库可以动态或静态地链接到应用程序中。一个静态链接库会被嵌入到应用程序的可执行映像中,并在应用程序启动时加载。 静态链接中的符号可以使用 DynamicLibrary.executable 或 DynamicLibrary.process 来加载。 相比之下,动态链接库则分布在应用程序中的单独的文件或文件夹中,并按需加载。在 Android 上,动态链接库作为一组 .so(ELF 可执行与可链接格式)文件分发,每个架构各有一个。 动态链接库在 Dart 中可以通过 DynamicLibrary.open 加载。 Dart dev 频道中的 API 已经可用: Dart API 参考文档. 步骤 1:创建插件如果你已经有一个插件,跳过这步。 如果要创建一个名为 “native_add” 的插件,你需要这么做: $ flutter create --platforms=android,ios --template=plugin native_add $ cd native_add提示 你可以使用 –platforms 来排除你不需要的平台。但是,你仍需要包含测试设备所需的平台。 步骤 2:添加 C/C++ 源码你需要让 Android 和 iOS 构建系统知道本地代码的存在,以便代码可以被编译并链接到最终的应用程序中。 你可以将特定于 Android 的源代码添加到 android 文件夹并修改 CMakeLists.txt 文件。同时,你可以在 Gradle 中指向 ios 文件夹,这样的话就可以为 iOS 和 Android 设定不同的资源。 FFI 库只能与 C 符号绑定,因此在 C++ 中,这些符号添加 extern C 标记。还应该添加属性来表明符号是需要被 Dart 引用的,以防止链接器在优化链接时会丢弃符号。 在 Android 中,你需要创建一个 CMakeLists.txt 文件用来定义如何编译源文件,同时告诉 Gradle 如何去定位它们。在项目根目录下,运行如下代码: cat > android/CMakeLists.txt |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |