- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 FFmpeg 开发一个 Android 应用程序。我已将 FFmpeg 构建到 *.so 文件中,并将它们放入 jniLibs 中,如下所示:
源代码
- 主要的
----jniLibs
------armeabi
--------libavcodec-57.so
--------libavformat-57.so
--------xx.so
在等级脚本中,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'' finished with non-zero exit value 2
最佳答案
您应该在使用 ndk-build
构建时添加库作为依赖项.
禁用默认 ndk-build
, 在您的 build.gradle
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
jni.srcDirs = []
}
ndk-build
任务,在您的
build.gradle
def ndkDir = properties.getProperty("ndk.dir")
task ndkBuild(type: Exec) {
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
commandLine ndkDir + File.separator + 'ndk-build.cmd', '-C', file('src/main/jni').absolutePath
} else {
commandLine ndkDir + File.separator + 'ndk-build', '-C', file('src/main/jni').absolutePath
}
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
Android.mk
,添加这样的库。
LOCAL_MODULE := # ...
# ...
LOCAL_LDFLAGS += -L/path/of/the/libraries -lavcodec-57 -lavformat-57 ...
关于Android Studio 链接预建库.so 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37806949/
我是一名优秀的程序员,十分优秀!