我正在尝试在我的颤振应用程序中包含一个 C 库。我有一些 .h 文件和一个 .a 文件。如果我理解正确, .h 文件是标题,而 .a 文件是静态链接库。
我的目标是将该库中的一些函数运行到我的颤振代码中,但我发现颤振文档非常不清楚如何做到这一点。我对C一无所知,所以我真的很难理解代码,而且我真的不知道从哪里开始。
我的问题是:是否可以在颤振应用程序中从 .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