2016-08-01 78 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']} –