多个dex文件在Google Play服务中定义

时间:2016-10-20 17:37:00

标签: android cordova android-gradle google-play-services

我在build.gradle文件中有以下依赖项。请注意,我使用的是Ionic / Cordova移动应用程序。

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    // SUB-PROJECT DEPENDENCIES START
    debugCompile project(path: "CordovaLib", configuration: "debug")
    releaseCompile project(path: "CordovaLib", configuration: "release")
    compile "com.google.android.gms:play-services-analytics:+"
    compile "com.onesignal:OneSignal:3.3.0@aar"
    compile "com.google.android.gms:play-services-gcm:+"
    compile "com.google.android.gms:play-services-location:+"
    compile "com.google.android.gms:play-services-ads:8.4+"
    // SUB-PROJECT DEPENDENCIES END
}

我在构建过程中遇到以下错误。

Error: cmd: Command failed with exit code 1 Error output:
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Dex: Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/internal/zzah;
    UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/internal/zzah;
        at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:591)
        at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:546)
        at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:528)
        at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:164)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:504)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
        at com.android.dx.command.dexer.Main.run(Main.java:277)
        at com.android.dx.command.dexer.Main.main(Main.java:245)
        at com.android.dx.command.Main.main(Main.java:106)


FAILURE: Build failed with an exception.

我阅读了以下SO链接。它说的是关于应用程序级别和模块级别的gradle文件。我不确定是哪两个文件。

Version conflict updating to 8.4.0

Multiple dex files define Lcom/google/android/gms/internal/zzim;

Multiple dex files define Lcom/google/android/gms/internal/zzau

2 个答案:

答案 0 :(得分:0)

如果在build.gradle的依赖项中包含多个相同的库/目录,则会发生该错误。这看起来也与您使用的另一个插件冲突,如thread中所述。

您可以查看以下链接:

  

检查build.gradle文件中的所有依赖项。您是否引用了包含已包含的依赖项的依赖项?例如,如果您包含appcompat-v7,则不需要包含appcompat-v4,因为v7包含v4中的所有功能。

  

此错误是由项目中引用的方法太多引起的。 You can read more here.通常,这意味着您需要删除未使用的库或使用proguard甚至在调试版本上减少引用的方法数量。您也可以使用文章中提到的multi-dex,但它会使您的项目更复杂。

答案 1 :(得分:0)

我不确定原因,但添加Google Admob库插件后,构建成功。

注意:我正在为Admob使用cordova插件。