【发布时间】:2016-08-01 11:53:16
【问题描述】:
我们将不同的 .so 文件集用于调试和发布版本。
build.gradle 包含以下内容:
sourceSets {
debug {
main.jniLibs.srcDirs = ['libs/debug']
test.jniLibs.srcDirs = ['libs/debug']
}
release {
main.jniLibs.srcDirs = ['libs/release']
test.jniLibs.srcDirs = ['libs/release']
}
}
.so 文件位于 libs/debug 和 libs/release 文件夹中。应用程序适用于为发布和调试模式创建的 apk。但是android单元测试用例失败并出现错误:
java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.test.mapp/app_files/.???" has bad ELF magic
at java.lang.Runtime.load(Runtime.java:331)
可能是什么原因?如果我们通过在 libs 文件夹中添加子文件夹(调试/发布)来同时使用 .so 文件的调试版本和发布版本,它会不起作用吗? 这里要补充的另一件事是,如果我在 libs 文件夹中使用一组(调试/发布).so 文件并在 build.gradle 中使用以下格式,它可以正常工作
sourceSets {
main.jniLibs.srcDirs = ['libs']
test.jniLibs.srcDirs = ['libs']
}
更新[08-11-2016]: 当应用程序调试 apk 在设备或模拟器上运行时,甚至会观察到崩溃。 发布的apk很好。 .so 文件也适用于不同的文件夹,如 debug/arm64-v8a、debug/mips 等。基于此,我猜 apk 没有从 libs/debug 子文件夹中正确选择 .so 文件。
【问题讨论】:
标签: android unsatisfiedlinkerror .so