デバッグバージョンとリリースバージョンに異なる.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ファイルがLIBS /デバッグおよびlibsに/リリースフォルダ内にあります。アプリケーションは、リリースとデバッグモードの両方で作成されたapkでうまく動作します。しかし、アンドロイドユニットのテストケースはエラーで失敗します:
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ファイルの1セット(デバッグ/リリース)を使用する場合、それは正常に動作していることで、build.gradleに次の形式を使用し
sourceSets {
main.jniLibs.srcDirs = ['libs']
test.jniLibs.srcDirs = ['libs']
}
アップデート[08-11 -2016]: アプリケーションのデバッグapkがデバイスまたはエミュレータで実行されている場合でもクラッシュが発生します。 リリースapkは問題ありません。また、.soファイルは、debug/arm64-v8a、debug/mipsなどの異なるフォルダ用です。これに基づいてapkは.soファイルをlibs/debugサブフォルダから適切に選んでいないと思います。
Andoridのユニットテストは、デバイス上で実行されます:あなたは、インストルメントユニット・テストを作成し、デバイスまたはエミュレーター上でテストを実行しなければならないテストのクラスでネイティブモジュールを使用するには
。 libsフォルダ内の.soファイルを1セット(デバッグまたはリリース)使用するとうまく動作します。次の形式を使用します。sourceSets {main.jniLibs.srcDirs = ['libs'] test.jniLibs.srcDirs = ['libs']} –