Android Studio中出现意外的顶级异常

时间:2015-02-05 05:48:38

标签: android android-studio gradle build.gradle

在我的一个项目中,我在构建gradle文件时遇到此异常

  

错误:任务执行失败':emBazaarV4:dexDebug'。

     
    

com.android.ide.common.internal.LoggedErrorException:无法运行命令:F:\ AndroidSDK \ build-tools \ 21.1.2 \ dx.bat --dex     --no-optimize --output F:\ AndroidStudioWorkspace \ EmBazaarV4 \ emBazaarV4 \ build \ intermediates \ dex \ debug     --input-list = F:\ AndroidStudioWorkspace \ EmBazaarV4 \ emBazaarV4 \ build \ intermediates \ tmp \ dex \ debug \ inputList.txt     错误代码:2输出:意外的顶级异常:       com.android.dex.DexException:多个dex文件定义     LCOM /谷歌/ GSON / JsonSerializer;在     com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)           在com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)           在com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)           在com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)           在com.android.dx.merge.DexMerger.merge(DexMerger.java:189)at     com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)           在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)

  

这是我的依赖

dependencies {
    compile 'com.facebook.android:facebook-android-sdk:3.22.0'
    compile 'com.aviary.android.feather.sdk:aviary-sdk:3.6.3'
    compile 'com.android.support:support-v4:21.0.3'
    compile 'com.google.android.gms:play-services:+'
    compile 'com.squareup.okhttp:okhttp:2.2.0'
    compile 'com.squareup.okio:okio:1.1.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'com.squareup.picasso:picasso:2.4.0'
    compile files('libs/commons-io-2.4.jar')
    compile files('libs/crashlytics.jar')
    compile files('libs/httpmime-4.1.3.jar')
    compile files('libs/jumblr-0.0.8-jar-with-dependencies.jar')
    compile files('libs/signpost-commonshttp4-1.2.1.2.jar')
    compile files('libs/signpost-core-1.2.1.2.jar')
    compile files('libs/simplesocialsharing.jar')
    compile files('libs/gcm.jar') }

我已尝试过所有内容但未获取如何排除此多个dex文件。我找到了像这样的v4的解决方案

 configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

那么这些错误是否有任何通用解决方案?

3 个答案:

答案 0 :(得分:4)

此错误

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

当您使用同一个库的不同版本时,会发生

在你的情况下,它发生在gson库中:   Lcom / google / gson / JsonSerializer;

检查您的依赖项。例如,OkHttp使用2.2.3版本。 https://github.com/square/okhttp/blob/master/pom.xml#L44

答案 1 :(得分:2)

正如Gabriele所说,TopLevel异常总是由于同一个库的不同版本的冲突而发生。

  

首先我建议,尽量避免使用尽可能多地添加文件依赖关系,始终尝试从jcenter存储库添加依赖项。看起来gradle会处理冲突的依赖关系。

现在,有一些方法可以避免它:

  1. 只使用一个包含所有必需类的版本。像app compact有所有v4支持类,所以你不需要导入v4支持veresion如果你导入appcompact v7。

  2. 您始终可以从已编译的依赖项中排除某个包。例如:

    //for the package:
    dependencies {
        compile("com.android.support:support-v4:21.0.3") {
              exclude group: 'com.android.support', module: 'support-v4'
        }
    }
    

答案 2 :(得分:0)

您在自己的应用中使用的是乳胶管网Google Play服务。最近,您可以在使用它时获得更多粒度。

关注this guide,您只能使用所需的部分。可能这将解决问题。你可以这样使用它:

compile com.google.android.gms:play-services-base:6.5.87
compile <... some other google play services part ...>

您可以阅读this link

中的“部分”的完整列表