安卓测试: Multiple dex files define Lorg/hamcrest/Description;

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

我在进行仪器测试时遇到以下运行时错误。

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依赖项,并且androidTestCompile中没有hamcrest-core,但在检测时仍然失败。

我错过了一些重要的事情吗?

谢谢!

最佳答案

深入研究gradle依赖项的结果后,我发现根本原因是org.powermock:powermock-api-mockito包含mockito-所有模块。

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

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

替换

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'
}

应该适合我。

关于安卓测试: Multiple dex files define Lorg/hamcrest/Description;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33362591/

相关文章:

android - 当在 Recyclerview 中滚动时,单选按钮会更改其选择

android - GMail for KitKat 在发送不是图像或视频的附件时崩溃

android - 构建被配置为首选设置存储库而不是项目存储库,但存储库 'maven' 是由构建文件 'build.gradle' 添加的

java - 将 android studio 从 3.0.1 更新到 3.1.0 后,任务应用程序 :compileDebugJavaWithJavac, 执行失败

java - 使用 flavor 维度时设置 Android applicationId 的正确方法是什么?

android - 平板电脑上的 CollapsingToolbarLayout 滚动行为

android - 如何查找 XML 文件中的错误?

android - 要在进程中运行dex,Gradle守护程序需要更大的堆。目前大约有1024 MB

Android:需要手动更新注释处理器以添加对 androidx 错误的支持

android - 未找到 Gradle DSL 方法 : 'androidtestcompile()'