我在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
答案 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插件。