Android Gradle 异常:"Multiple dex files define",在 exploded-aar 下重复 类

Android Gradle Exception: "Multiple dex files define", duplicated classes under exploded-aar

我正在尝试使用我的 aar-library(一个 Maven 项目,使用 android-maven-plugin by Jayway) 在 gradle 项目中,但是,当我 运行 gradle assembleDebug 时,出现以下异常:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define   Lcom/google/android/gms/actions/ItemListIntents;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:502)
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)

如果我在我的项目中搜索 class,Android Studio 会找到两个结果:

运行检查 gradle dependencyInsight --dependency play-services-base --configuration compile 我得到:

com.google.android.gms:play-services-base:7.0.0
+--- com.google.android.gms:play-services-gcm:7.0.0
|    \--- aar-library:core:1.0.10-SNAPSHOT
|         \--- compile                
+--- com.google.android.gms:play-services-location:7.0.0
|    \--- com.nexse.mobile.betting.core:core:1.0.10-SNAPSHOT (*)
\--- com.google.android.gms:play-services-maps:7.0.0
     \--- com.google.android.gms:play-services-location:7.0.0 (*)

(*) - dependencies omitted (listed previously)

问题出在 aar-library classes.jar: ListIntentIntents (显然,整个 play-services-base 模块)已经存在!所以里面

my-gradle-project/app/build/intermediates/exploded-aar/

我有两个 play-services-base 模块的引用:一个在 com.google.android.gms 文件夹下,一个在 aar-library 文件夹下

我该怎么办?

您可以尝试在 gradle 文件中包含 multidex enable true,如下所示:

android {
compileSdkVersion 22
buildToolsVersion "23.0.0"

     defaultConfig {
         minSdkVersion 14 //lower than 14 doesn't support multidex
         targetSdkVersion 22

         // Enabling multidex support.
         multiDexEnabled true
     }
}

If the number of method references in your app exceeds the 65K limit, your app may fail to compile. You may be able to mitigate this problem when compiling your app by specifying only the specific Google Play services APIs your app uses, instead of all of them.

以上言论摘自https://developers.google.com/android/guides/setup

首先: 在菜单栏 (Android Studio) 的 Build 项中单击 Clean Project

其次:尝试添加单独的依赖项。示例 如果您只想使用位置服务,则只需在您的 build.gradle 中添加 compile 'com.google.android.gms:play-services-location:7.8.0'

我找到罪魁祸首了!我正在使用旧的 android maven 插件 com.jayway.maven.plugins.android.generation2

新的 com.simpligility.maven.plugins 修复了错误。

无论如何感谢您的帮助。