【发布时间】:2016-10-14 21:17:28
【问题描述】:
我正在使用 FFmpeg 开发一个 Android 应用程序。我已将 FFmpeg 构建到 *.so 文件中,并将它们放入 jniLibs 中,如下所示:
src
--主要
----jniLibs
-----armeabi
--------libavcodec-57.so
--------libavformat-57.so
--------xx.so
在grade script中,ndk的abifilter是armeabi。
在 java 文件中,我已经成功加载了这些 .so 文件,并且构建的 apk 也包含它们。但是,当我在 src/jni 文件夹下的 .c 文件中使用它们的任何 API(例如 av_register_all())时,会出现构建错误:
错误:(14) 未定义对 'av_register_all' 的引用
错误:任务 ':app:compileDebugNdk' 执行失败。
com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Users/zhouyf/Library/Android/sdk/ndk-bundle/ndk-build'' 完成非零退出值 2
链接器中似乎存在问题。但我发现只需将 .so 文件放入 jniLibs/armeabi 就可以了。 我需要修改 build.gradle 文件来链接那些 .so 文件吗?
附言
如果我不调用 API,应用程序将成功运行,只有警告:W/linker: libavformat-57.so: used DT entry: type 0x6ffffffe arg 0x60e0 W/链接器:libavformat-57.so:未使用的 DT 条目:类型 0x6fffffff arg 0x2
环境: 安卓工作室 2.1.1 Mac OS X 10.11.5
【问题讨论】:
-
尝试升级到AndroiStudio 2.2,您将与内置调试器externalNativeBuild的其他好东西相处融洽
标签: android gradle ffmpeg android-ndk java-native-interface