【问题标题】:Android Gradle Exception: "Multiple dex files define", duplicated classes under exploded-aarAndroid Gradle 异常:“多个 dex 文件定义”,exploded-aar 下的重复类
【发布时间】:2015-09-22 07:49:28
【问题描述】:

我正在尝试在 gradle 项目中使用我的 aar-library(一个 maven 项目,使用 Jayway 的 android-maven-plugin 构建)但是,当我运行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-library classes.jar: ListIntentIntents(很明显,整个 play-services-base 模块)已经存在!所以里面

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

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

我该怎么办?

【问题讨论】:

    标签: java android maven gradle aar


    【解决方案1】:

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

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

    无论如何感谢您的帮助。

    【讨论】:

      【解决方案2】:

      您可以尝试在您的 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
           }
      }
      

      【讨论】:

      • 首先感谢您的回复。这似乎不起作用::app:packageAllDebugClassesForMultiDex FAILED Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: com/google/android/gms/actions/ItemListIntents.class 但是,我的应用有 8 作为 minSdkVersion,所以我宁愿不走这条路。
      【解决方案3】:

      如果您的应用中的方法引用数量超过了 65K 的限制, 您的应用程序可能无法编译。您也许可以缓解此问题 通过仅指定特定的 Google Play 编译您的应用程序时 您的应用使用的服务 API,而不是全部。

      以上语句取自https://developers.google.com/android/guides/setup

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-07
        相关资源
        最近更新 更多