安卓Gradle异常:“Multiple dex files define”,在exploded-aar下重复的类。

5

我正在尝试在Gradle项目中使用我的aar库(一个使用Jayway的android-maven-plugin构建的Maven项目),但是当我运行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)

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

  • ListItemIntents (com.google.android.gms.action) play-services-base-7.0.0(classes.jar)
  • ListItemIntents (com.google.android.gms.action) aar-library(classes.jar)

运行检查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-libraryclasses.jar 文件中:ListIntentIntents(以及整个 play-services-base 模块)已经存在!因此,在其中。
my-gradle-project/app/build/intermediates/exploded-aar/

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

我该怎么办?

3个回答

1
我找到了罪魁祸首!我使用的是旧版本的 android maven 插件 com.jayway.maven.plugins.android.generation2 新版本的插件 com.simpligility.maven.plugins 解决了这个错误。
无论如何,感谢您的帮助。

0
如果您的应用程序中方法引用的数量超过了65K的限制,您的应用程序可能无法编译。您可以通过仅指定应用程序使用的特定Google Play服务API而不是所有API来在编译应用程序时缓解此问题。
以上陈述摘自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'”。

0
你可以尝试在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
     }
}

2
首先感谢您的回复。似乎不起作用:`:app:packageAllDebugClassesForMultiDex FAILED Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
java.util.zip.ZipException: duplicate entry: com/google/android/gms/actions/ItemListIntents.class`
但是,我的应用程序的minSdkVersion为8,所以我不想走这条路。
- Simone Leoni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接