执行工具测试时,我遇到以下运行时错误。
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 librarty从其他依赖项中排除,但这并不能解决我的问题:(
这是我的
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 dependencies
,但hamcrest-core
中没有androidTestCompile
,但是在检测时仍然失败。我想念的重要东西吗?
谢谢!
最佳答案
在深入研究gradle dependencies
的结果之后,我发现根本原因是org.powermock:powermock-api-mockito
包含mockito-all
模块。
但是,mockito-all
模块内部包含hamcrest
库(但您无法使用gradle dependencies
看到它),这与其他依赖项冲突。
因此,要解决此问题,我们需要将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'
}
应该为我工作。