【问题标题】:Android Testing: Multiple dex files define Lorg/hamcrest/Description;Android测试:多个dex文件定义Lorg/hamcrest/Description;
【发布时间】:2015-10-27 08:01:31
【问题描述】:

我在进行插桩测试时遇到以下运行时错误。

Unknown source file : UNEXPECTED TOP-LEVEL EXCEPTION:
Unknown source file : com.android.dex.DexException: Multiple dex files define Lorg/hamcrest/Description;
Unknown source file :   at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
Unknown source file :   at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
Unknown source file :   at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
Unknown source file :   at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
Unknown source file :   at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
Unknown source file :   at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:502)
Unknown source file :   at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
Unknown source file :   at com.android.dx.command.dexer.Main.run(Main.java:277)
Unknown source file :   at com.android.dx.command.dexer.Main.main(Main.java:245)
Unknown source file :   at com.android.dx.command.Main.main(Main.java:106)

我认为这个问题有很多类似的问题。

但是,他们中的大多数人建议从其他依赖项中排除 hamcrest 库,但这并没有解决我的问题:(

这是我的build.gradle的依赖部分

dependencies {
    androidTestCompile files('libs/java-hamcrest-2.0.0.0.jar')
    androidTestCompile files('libs/hamcrest-json-0.2.jar')
    androidTestCompile files('libs/jsonassert-1.2.3.jar')
    androidTestCompile ('org.powermock:powermock-module-junit4:1.6.3')
    {
        exclude module: 'hamcrest-core'
        exclude module: 'objenesis'
    }
    androidTestCompile ('org.powermock:powermock-api-mockito:1.6.3') {
        exclude module: 'hamcrest-core'
        exclude module: 'objenesis'
    }

    androidTestCompile ('com.android.support.test:runner:0.4.1') {
        exclude module: 'hamcrest-core'
    }
    androidTestCompile ('com.android.support.test:rules:0.4.1') {
        exclude module: 'hamcrest-core'
    }

}

我使用gradle dependenciesandroidTestCompile 中没有hamcrest-core,但在检测时仍然失败。

我错过了什么重要的事情?

谢谢!

【问题讨论】:

标签: android gradle android-gradle-plugin build.gradle android-testing


【解决方案1】:

深入查看gradle dependencies的结果,发现根本原因是org.powermock:powermock-api-mockito包含mockito-all模块。

但是,mockito-all 模块内部包含hamcrest 库(但是您无法使用gradle dependencies 看到它),这与其他依赖项冲突。

因此,要解决此问题,我们需要将org.powermock:powermock-api-mockito 替换为不包含mockito-allorg.powermock:powermock-api-support

替换

dependencies {
    androidTestCompile ('org.powermock:powermock-api-mockito:1.6.3') {
        exclude module: 'hamcrest-core'
        exclude module: 'objenesis'
    }
}

dependencies {
    androidTestCompile 'org.powermock:powermock-api-support:1.6.3'
}

应该对我有用。

【讨论】:

    猜你喜欢
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 2018-03-15
    • 2015-07-23
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    相关资源
    最近更新 更多