意外的顶级异常:com.android.dex.DexException:多个dex文件定义

时间:2014-03-18 01:23:46

标签: java android android-studio google-play-services

我在使用Android Studio在我的Android应用上尝试使用Google Play服务时遇到了麻烦。

我已经尝试了一切,但仍然无法工作。

这是错误。

Execution failed for task ':app:dexDebug'.
  

com.android.ide.common.internal.LoggedErrorException:无法运行命令:       / Users / jghg / Desktop / My App / Android / SDK / android-sdk-mac_86 / build-tools / 19.0.1 / dx --dex --output / Users / jghg / Desktop / My App / Eureka / UDA / app /build/libs/app-debug.dex / Users / jghg / Desktop / My App / Eureka / UDA / app / build / classes / debug / Users / jghg / Desktop / My App / Eureka / UDA / app / build / dependency -cache / debug / Users / jghg / Desktop / My App / Eureka / UDA / app / build / pre-dexed / debug / classes-08979151dd1373bd3f799299d93376d22d4afa46.jar / Users / jghg / Desktop / My App / Eureka / UDA / app / build /pre-dexed/debug/classes-167b9d3c5d689abe004c3fa5b0bcb945d3f0fc8e.jar/Users/jghg / Desktop / My App / Eureka / UDA / app / build / pre-dexed / debug / google-play-services-ec20f8af7bb457c5095cae1afa0cee722582f198.jar / Users / jghg /桌面/我的应用程序/ Eureka / UDA / app / build / pre-dexed / debug / support-v4-13.0.0-473d85b8d55c88bfed3404072e6c132f96543429.jar / Users / jghg / Desktop / My App / Eureka / UDA / app / build / pre- dexed / debug / support-v4-19.0.1-861cc05365a0e9262c764da37d61e3f93dc16de6.jar / Users / jghg / Desktop / My App / Eureka / UDA / app / build / pre-dexed / debug / support-v4-19.0.1-dcc11 377c764caea791f711123b8b678f876c3b6.jar / Users / jghg / Desktop / My App / Eureka / UDA / app / build / pre-dexed / debug / twitter4j-async-3.0.5-0904cb320186fb23a9a9bf25a048c5bc4ec07bc2.jar / Users / jghg / Desktop / My App / Eureka / UDA / app / build / pre-dexed / debug / twitter4j-core-3.0.5-41d2d5805e2d90cf77813a126306c4cbe22583ae.jar / Users / jghg / Desktop / My App / Eureka / UDA / app / build / pre-dexed / debug / twitter4j-examples -3.0.5-adc1ee9b037c8061429560e6a5fe89ce8e502db6.jar / Users / jghg / Desktop / My App / Eureka / UDA / app / build / pre-dexed / debug / twitter4j-media-support-3.0.5-37d138cdc631738d13ddb6f4d34c560a9cd8e048.jar / Users / jghg /桌面/我的应用程序/ Eureka / UDA / app / build / pre-dexed / debug / twitter4j-stream-3.0.5-c96c138ea216b25631a1a8b47520ecaf33f288d8.jar     错误代码:       2     输出:       意外的顶级例外情况:       com.android.dex.DexException:多个dex文件定义Lcom / google / ads / AdRequest $ ErrorCode;           在com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)           在com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)           在com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)           在com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)           在com.android.dx.merge.DexMerger.merge(DexMerger.java:188)           在com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)           在com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)           在com.android.dx.command.dexer.Main.run(Main.java:230)           在com.android.dx.command.dexer.Main.main(Main.java:199)           在com.android.dx.command.Main.main(Main.java:103)

感谢。 最好的祝福。

3 个答案:

答案 0 :(得分:26)

如果在build.gradle的依赖项中包含多个相同的库/目录,则会发生错误。好吧,假设您有一个如下所示的App结构:

enter image description here

所以你有主“应用程序”,然后你有一堆子应用程序/模块/库。这些库是:1)gene_test_library,2)genes_nine_old_androids_library,& 3)swipe_list_view_library

我的名字是Gene,所以这就是为什么有这些“基因”库。

build.gradle的{​​{1}}内,我有:

“app”

dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:21.0.0' compile project(':libraries:gene_test_library') //compile project(':libraries:genes_nine_old_androids_library') compile project(':libraries:swipe_list_view_library') } 的{​​{1}}内,我什么都没有:

build.gradle

gene_test_librarydependencies { } ,我有:

build.gradle

gene_nine_old_androids_librarydependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.0' } ,我有:

build.gradle

这行代码swipe_list_view_library只是意味着“嘿,请查看此模块内的'libs'文件夹中的任何jar文件。我在任何模块的libs文件夹中都没有任何内容,因此您可以忽略该行代码。

所以让我说我取消注释dependencies { compile 'com.nineoldandroids:library:2.4.0+' compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.0' } compile fileTree(dir: 'libs', include: ['*.jar'])模块的//compile project(':libraries:genes_nine_old_androids_library')中。然后我会得到build.gradle错误。这是为什么?

enter image description here

好吧,在“app” “UNEXPECTED TOP-LEVEL EXCEPTION:”内写//compile project(':libraries:genes_nine_old_androids_library')build.gradle模块的构建依赖关系并将其放在那里相同。因此取消注释“app”语句,“app”模块的“genes_nine_old_androids_library”变为:

//compile project(':libraries:genes_nine_old_androids_library')

注意现在build.gradle如何显示2倍。这就是错误的来源。

答案 1 :(得分:10)

您的Google Play服务库正在从项目的其他依赖项中导出,并且在编译时dex编译器会感到困惑。

如果您正在使用Gradle,那么在项目的build.gradle中包含它应该排除将支持库导出到您的主项目中。

apply plugin: 'android'
apply plugin: 'crashlytics'

/** Must exclude exported support jars from dependencies, or get dex duplicate class      error.
*  we're
**/
configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
    all*.exclude group: 'com.google.android.gms', module: 'play-services'
}

如果您正在使用andoid studio构建系统。然后你应该去File - >项目结构和禁用 - >模块。浏览每个模块并单击依赖选项卡,取消选中支持库和Google Play服务库的导出列。

如果您需要更多帮助,请发表评论。

答案 2 :(得分:3)

如果您在build.gradle中导入了相同库的不同版本,而在其中一个库中导入了相同库,则也会发生这种情况。例如,Google Play商店服务要求您让它们都引用我的相同版本:

app build.gradle

compile 'com.google.android.gms:play-services-base:7.5.0'

,而:

module / library build.gradle

compile 'com.google.android.gms:play-services-cast:7.8.+'

将我的应用版本升级到7.8.0解决了问题