我如何在 Android Studio 中添加 .so 库并通过包含 native 代码的 .c 文件调用它?
我用谷歌搜索了一个星期,尝试了所有可能的解决方案,但一无所获。
网站是this , this , this , this , 还有更多...
我是来调用 native .c 文件的,但我无法包含 .so 库,因为 Android Studio 找不到它。
我还不想使用新的实验性 gradle。
环境配置是下一个:
Android Studio 1.5
Gradle 2.8
Android 插件版本 1.3.0
JDK 1.8.0
这是我的代码和 gradle 配置的一部分:
渐变文件
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
....
ndk {
moduleName "ffmpegkit"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
项目结构
在 .C 文件中包含语句
如您所见,“libavcodec.so”未找到,但根据我找到的一些解决方案,项目结构是正确的。
有谁知道如何解决这个问题并将这些 .so 库与 .c 文件一起使用?
非常感谢!
最佳答案
我假设您的 .c 文件位于项目的 ffmpegkit 目录下。您也将 ffmpeg 二进制文件复制到项目的 jniLibs
中。到目前为止,一切都很好。
您需要提供 ffmpeg 包含文件的路径,以便您的 .c 文件可以编译。您还必须列出链接器查找您正在构建的 libffmpegkit.so 的外部引用所需的库:
defaultConfig {
....
ndk {
moduleName "ffmpegkit"
abiFilter "armeabi"
cFlags "-I/qqq/ffmpeg"
ldLibs "-llog -L src/main/libs", "avformat", "avcodec", "avutil"
}
}
确保 ffmpeg 库是使用兼容的 Android 工具链编译的!请注意,列出 ffmpeg 库的顺序很重要。比如,libavformat 依赖于 libavcodec,因此它应该放在前面。
关于android - 如何在 Android Studio 1.5 中包含 .so 库和 .c 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33610061/