多个dex文件定义了Landroid/support/test/espresso/contrib/DrawerActions。

4
尝试迁移到 Espresso 2.1 时,我遇到了以下障碍。
com.android.dex.DexException: Multiple dex files define Landroid/support/test/espresso/contrib/DrawerActions$1;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
    at com.android.dx.command.dexer.Main.run(Main.java:246)
    at com.android.dx.command.dexer.Main.main(Main.java:215)
    at com.android.dx.command.Main.main(Main.java:106)

但我只看到一个来源:
 androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.1'

有什么解决这个问题的提示吗?这是依赖树:

androidTestCompile - Classpath for compiling the androidTest sources.
+--- com.android.support.test:runner:0.2
|    +--- junit:junit-dep:4.10
|    |    \--- org.hamcrest:hamcrest-core:1.1 -> 1.3
|    +--- com.android.support.test:exposed-instrumentation-api-publish:0.2
|    \--- com.android.support:support-annotations:22.0.0
+--- com.android.support.test:rules:0.2
|    \--- com.android.support.test:runner:0.2 (*)
+--- com.android.support.test.espresso:espresso-contrib:2.1
|    +--- com.android.support:recyclerview-v7:22.0.0
|    |    +--- com.android.support:support-v4:22.0.0
|    |    |    \--- com.android.support:support-annotations:22.0.0
|    |    \--- com.android.support:support-annotations:22.0.0
|    +--- com.android.support:support-v4:22.0.0 (*)
|    \--- com.android.support.test.espresso:espresso-core:2.1
|         +--- com.android.support.test:rules:0.2 (*)
|         +--- com.squareup:javawriter:2.1.1
|         +--- org.hamcrest:hamcrest-integration:1.1
|         |    \--- org.hamcrest:hamcrest-core:1.1 -> 1.3
|         +--- com.android.support.test.espresso:espresso-idling-resource:2.1
|         +--- org.hamcrest:hamcrest-library:1.1
|         |    \--- org.hamcrest:hamcrest-core:1.1 -> 1.3
|         +--- javax.inject:javax.inject:1
|         +--- com.google.code.findbugs:jsr305:2.0.1
|         +--- com.android.support.test:runner:0.2 (*)
|         +--- javax.annotation:javax.annotation-api:1.2
|         \--- org.hamcrest:hamcrest-core:1.1 -> 1.3
+--- info.cukes:cucumber-java:1.2.0
|    \--- info.cukes:cucumber-core:1.2.0
|         +--- info.cukes:cucumber-html:0.2.3
|         +--- info.cukes:cucumber-jvm-deps:1.0.3
|         \--- info.cukes:gherkin:2.12.2
+--- info.cukes:cucumber-android:1.2.0
+--- com.google.dexmaker:dexmaker-mockito:1.0
|    \--- org.mockito:mockito-core:1.9.5
|         \--- org.objenesis:objenesis:1.0
+--- org.assertj:assertj-core:1.7.1-TARGETFIX
+--- com.uphyca:android-junit4:0.5
\--- junit:junit:4.11
     \--- org.hamcrest:hamcrest-core:1.3

请发布您的 build.gradle 文件。 - Jared Burrows
我已经添加了依赖树 - 不幸的是,我无法发布build.gradle。 - ligi
很遗憾,@JaredBurrows,不行 - 但还是谢谢。 - ligi
你尝试过那个链接中的两个建议吗?那个用户在升级时也遇到了类似的问题。请尝试他的两个解决方案。 - Jared Burrows
你不能展示 build.gradle,也不能使用 espresso 2.0 吗?你甚至还没有真正“使用”它,只是升级到了它。 - Jared Burrows
显示剩余10条评论
1个回答

0

世界真小 ;)

这个多dex文件的DexException是由espresso-contrib:2.1间接引起的,真正的根本原因是com.android.support.test:runner:0.2,它还有其他的子依赖项。

对我来说,移除test:runner就可以解决问题。

虽然post中说是由于com.android.support:support-v4,但在你的情况下,测试使用的是22.0.0版本,而你的应用程序模块可能使用不同的版本。所以我尝试了:

androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.1') {
    exclude group: 'com.android.support', module: 'support-v4'
    exclude module: 'support-annotations'
}

但是它根本不起作用。


1
所以你的答案实际上是无效的... - Ovidiu Latcu
1
@OvidiuLatcu 我只是在尝试分析问题,记录线索以及什么是有效的或无效的。即使它不起作用,它仍然可能有所帮助。 - Jing Li
@JingLi 什么?那是一个糟糕的理由。 - Jared Burrows
抱歉@JaredBurrows,但什么是可怕的原因? - Jing Li
请在StackOverflow上尽量少留评论。您希望添加与问题相关的答案,这一点您已经做到了。我说它是一个“糟糕的理由”,因为您说“即使它不起作用,它仍然可能有帮助。”这意味着您甚至没有尝试过自己的答案 - Jared Burrows
1
请阅读我的原始回答,我说“但它根本不起作用”,为什么你要说“我甚至没有尝试过自己的答案”? - Jing Li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接