【问题标题】:Android Unit Test and .so file [Linker Error]Android 单元测试和 .so 文件 [链接器错误]
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • Andorid 单元测试在设备上运行。如果我在 libs 文件夹中使用一组(调试或发布).so 文件,它工作正常。并使用以下格式:sourceSets { main.jniLibs.srcDirs = ['libs'] test.jniLibs.srcDirs = ['libs'] }
    猜你喜欢
    • 2016-10-25
    • 2011-09-10
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2014-10-12
    • 2011-02-02
    相关资源
    最近更新 更多