1

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

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

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

4

1 回答 1

1

与往常一样,从 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
于 2021-05-11T21:22:13.370 回答