当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《意外的顶级异常:com.android.dex.DexException:多个dex文件定义》经验,为你挑选了2个好方法。

我在使用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/Desktop/My App/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/jgh g/Desktop/My App/Eureka/UDA/app/build/pre-dexed/debug/support-v4-19.0.1-dcc11377c764caea791f711123b8b678f876c3b6.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/Desktop/My App/Eureka/UDA/app/build/pre-dexed/debug/twitter4j- stream-3.0.5-c96c138ea216b25631a1a8b47520ecaf33f288d8.jar错误代码:2输出:UNEXPECTED TOP-LEVEL EXCEPTION:com.android.dex.DexException:多个dex文件定义Lcom/google/ads/AdRequest $ ErrorCode; 在com.android.dx.merge.DexMerger.mergeClassDefs的com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)的com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594) (dexMerger.java:533)位于com.android的com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)com.android.dx.merge.DexMerger.merge(DexMerger.java:188). dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)位于com.android.dx.com上的com.android.dx.command.dexer.Main.runMonoDex(Main.java:287).在com.android.dx.command.Main.main(Main.java:103)的com.android.dx.command.dexer.Main.main(Main.java:199)运行(Main.java:230)

谢谢.最好的祝福.



1> Gene..:

如果在build.gradle的依赖项中包含多个相同的库/目录,则会发生此错误.好的,假设你有一个看起来像这样的App结构:

在此输入图像描述

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

我叫Gene,这就是为什么有这些"基因"库的原因.

里面build.gradle“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')
}

里面build.gradlegene_test_library,我什么都没有:

dependencies {
}

里面build.gradlegene_nine_old_androids_library,我有:

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

里面build.gradleswipe_list_view_library,我有:

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'])只是意味着"嘿,看看这个模块里面'libs'文件夹中的任何jar文件.我在任何模块的libs文件夹中都没有任何内容,因此您可以忽略该行代码.

所以我们可以说我取消了//compile project(':libraries:genes_nine_old_androids_library')build.gradle“app”模块.然后我会得到“UNEXPECTED TOP-LEVEL EXCEPTION:”错误.这是为什么?

在此输入图像描述

好吧,//compile project(':libraries:genes_nine_old_androids_library')build.gradlefor中编写“app”,与获取“genes_nine_old_androids_library”模块的构建依赖关系并将其放在那里相同.因此取消注释该//compile project(':libraries:genes_nine_old_androids_library')声明,build.gradlefor"app"模块变为:

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

    compile project(':libraries:gene_test_library')
    ***compile fileTree(dir: 'libs', include: ['*.jar'])***
    ***compile 'com.android.support:appcompat-v7:21.0.0'***
    compile project(':libraries:swipe_list_view_library')
}

请注意现在如何compile 'com.android.support:appcompat-v7:21.0.0'显示2x.这就是错误的来源.


我随机地遇到了这个问题,我可以在很短的时间内构建/安装应用程序,在<5次之后我得到这个例外,然后我做了一个干净的它再次起作用:S

2> iTapAndroid..:

您的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 - > project structure并禁用 - > modules.浏览每个模块并单击依赖选项卡,取消选中支持库和Google Play服务库的导出列.

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

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有