2016-08-01 87 views
1

我们使用不同的.so文件集来调试和发布版本。 build.gradle包含followign事情:Android单元测试和.so文件[链接器错误]

sourceSets { 
debug { 
     main.jniLibs.srcDirs = ['libs/debug'] 
     test.jniLibs.srcDirs = ['libs/debug'] 
     } 
release { 
     main.jniLibs.srcDirs = ['libs/release'] 
     test.jniLibs.srcDirs = ['libs/release'] 
     } 
} 

的.so文件是库/调试和库/ 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文件的调试版本和发行版本,那么它不起作用吗? 还有一件事在这里补充的是,它如果我使用.so文件的一组(调试/释放)在libs文件夹和的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文件。

回答

0

如果您尝试在开发机器上运行单元测试,那么您显然不能使用为Android编译的本机模块。

要使用测试类的本机模块,您必须运行一个设备或模拟器上测试,创建仪表单元测试: https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html

+0

的Andorid单元测试设备上运行。如果我在libs文件夹中使用一组(调试或释放).so文件,它工作正常。并使用以下格式:sourceSets {main.jniLibs.srcDirs = ['libs'] test.jniLibs.srcDirs = ['libs']} –