Android测试:多个dex文件定义Lorg/hamcrest/Description;

Android测试:多个dex文件定义Lorg/hamcrest/Description;,android,gradle,android-gradle-plugin,build.gradle,android-testing,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.readSortableT

在执行检测测试时,我遇到以下运行时错误

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 Library从其他依赖项中排除,但这并没有解决我的问题:(

这是我的
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核心
,但在插入时仍然失败

我错过了什么重要的事情


谢谢!

在深入研究了
gradle dependencies
的结果后,我发现根本原因是
org.powermock:powermock api mockito
包含
mockito all
模块

但是,
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'
    }
}


应该对我有用。

我添加了一个
配置{all*.exclude module:'hamcrest core'}
,但它仍然不起作用。可能是
dependencies {
    androidTestCompile 'org.powermock:powermock-api-support:1.6.3'
}