如何在flutter中运行c静态链接库.a存档?

问题描述

我正在尝试在我的 Flutter 应用程序中包含一个 C 库。 我有一些 .h 文件一个 .a 文件。 如果我理解正确,.h 文件标题,.a 文件是静态链接库。

我的目标是将该库中的一些函数运行到我的 Flutter 代码中,但我发现 Flutter 文档对如何执行此操作非常不清楚。 我对 C 一无所知,所以我真的很难理解代码,而且我真的不知道从哪里开始。

我的问题是:是否可以在 Flutter 应用程序中从 .a 文件运行代码,我该怎么做? 或者我需要一个 .so 文件,还是源代码

解决方法

一如既往,从 Flutter 插件项目开始。显然,请参阅此处的说明:https://flutter.dev/docs/development/platform-integration/c-interop

特别是对于 .a 文件

对于 iOS,创建一个文件夹 projectname/ios/lib 并将 .a 文件复制到那里,然后在您的 podspec 中添加额外的一行:

s.ios.vendored_libraries = 'lib/libFooBar.a'

对于 Android,创建一个文件夹 projectname/android/lib 并将 .a 文件复制到那里 - 可能有多个用于不同的架构。

build.gradle 中,靠近顶部:

def my_lib_folder = new File(projectDir,'lib')

并在 defaultConfig 下的 externalNativeBuild 中添加 cmake 部分: 参数“-DMY_LIB_FOLDER=${my_lib_folder}”

这两个操作导致该定义被传递给 CMake。

现在,当您将 C 文件添加到项目时(请参阅顶部链接中的说明),它们将与您提供的 .a 库链接。

现在,在 CMakeLists.txt

中使用它

如果您没有 target_link_libraries 部分,请添加它,您现在可以添加此咒语以引用您的 .a 库:

${MY_LIB_FOLDER}/libSomelibrary${ANDROID_ABI}.a