【问题标题】:Android Studio 3.0 Execution failed for task: unable to merge dexAndroid Studio 3.0 任务执行失败:无法合并 dex
【发布时间】:2023-03-04 22:27:02
【问题描述】:

android studio 在构建执行时遇到构建错误:

错误:任务 ':app:transformDexArchiveWithExternalLibsDexMergerForDebug' 执行失败。 java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: 无法合并 dex"

我的应用程序:build.gradle 文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion '26.0.2'
    defaultConfig {
        applicationId "com.pdroid.foodieschoice"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.firebaseui:firebase-ui-auth:2.3.0'

    testCompile 'junit:junit:4.12'
}
configurations.all {
    resolutionStrategy {
        force 'com.android.support:appcompat-v7:26.0.1'
        force 'com.android.support:support-compat:26.0.1'
        force 'com.android.support:support-core-ui:26.0.1'
        force 'com.android.support:support-annotations:26.0.1'
        force 'com.android.support:recyclerview-v7:26.0.1'
    }
}

apply plugin: 'com.google.gms.google-services'

任何解决方案

编辑:我已经通过 firebase github 站点完成了示例并解决了

【问题讨论】:

  • 你必须在你的应用中包含 multiDex 支持
  • 并尝试清理、重建您的项目
  • 我建议您编辑您的问题并发布您的 Gradle 控制台的整个输出,而不仅仅是那一行。您的问题的详细信息位于输出的其他位置。
  • @CommonsWare 我已经发布了我的整个错误。它只有两行。
  • 尝试禁用即时运行清理您的项目并添加 android { defaultConfig { multiDexEnabled true } }

标签: android android-studio-3.0 build-error


【解决方案1】:

对于基于 Cordova 的项目,在再次构建之前运行 cordova clean android,正如 @mkimmet 建议的那样。

【讨论】:

  • 有人请将此答案标记为正确。它解决了问题。
  • 对我来说,安装 'cordova-plugin-androidx' 和 'cordova-plugin-androidx-adapter' 解决了问题
【解决方案2】:

当您添加可能与您的 compileSdkVersion 不兼容的外部库时会发生此错误。

添加external library时要小心。

我在这个问题上花了 2 天时间,终于按照这些步骤解决了。

  • 确保您的所有支持库都与您的build.gradle(Module:app) 中的compileSdkVersion 相同,在我的情况下是26

  • 在您的 defaultConfig 类别中输入 multiDexEnabled true。这是重要的部分。

  • 转到文件 | 设置 | 构建、执行、部署 | Instant Run 并尝试启用/禁用 Instant Run to hot swap... 并点击 okay

  • Sync你的项目。

  • 最后,转到构建 |点击重建项目

  • 注意:重建项目首先清理然后构建项目。

【讨论】:

  • 对我有帮助,谢谢。
  • 很高兴听到这个消息。快乐的 Androiding。
  • @YajliMaclo 很棒!
【解决方案3】:

尝试在gradle中添加这个

    android {
      defaultConfig {
        multiDexEnabled true
        }
   }

【讨论】:

  • 您是否尝试过使 android studio 中的缓存无效? @Anguraj
  • 不是启用 multidex 的唯一步骤。在较新的 API 级别中也不需要
【解决方案4】:

分辨率:

参考to this link:由于根据minSdkVersion 有多种关闭警告的选项,因此将其设置为20以下

 android {
     defaultConfig {
         ...
         minSdkVersion 15 
         targetSdkVersion 26
         multiDexEnabled true
     }
     ... }

 dependencies {   compile 'com.android.support:multidex:1.0.3' }

如果您的 build.gradle 集中的 minSdkVersion 大于 20,请使用以下命令关闭警告:

  android {
      defaultConfig {
          ...
          minSdkVersion 21 
          targetSdkVersion 26
          multiDexEnabled true
      }
      ... }

更新依赖如下:

     dependencies {
        implementation 'com.android.support:multidex:1.0.3'
     }

同样,唯一的区别是依赖项中的关键字:

minSdkVersion 低于 20:使用 compile

minSdkVersion 20 以上:使用实现

  1. 希望对您有所帮助,如果解决了您的问题,请点赞,感谢您的宝贵时间。
  2. 还需了解更多信息,关于为什么会出现这种情况,请阅读链接中的第一段,它将彻底解释原因?以及此警告的含义。

【讨论】:

    【解决方案5】:

    只需尝试执行“构建 -> 清理项目”即可。这为我解决了问题。

    【讨论】:

    • 感谢我在 Ionic/Cordova 项目中通过运行 cordova clean android 为我工作,同时我还安装了 cordova-android-support-gradle-release 插件。
    • 喜欢用简单的东西解决问题!谢谢!
    • 这在我使用 React Native 时为我解决了这个问题。
    • 谢谢,这是解决此问题的最简单方法,我花了 3 天时间解决此问题,您的回答解决了我的所有问题。再次感谢我的兄弟!!!
    • 谢谢。在 Android Studio 4.1 上帮助我。拯救了我的一天。
    【解决方案6】:

    对我来说,添加

    multiDexEnabled true
    

    packagingOptions {
            exclude 'META-INF/NOTICE' 
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/notice'
            exclude 'META-INF/notice.txt'
            exclude 'META-INF/license'
            exclude 'META-INF/license.txt'
        }
    

    进入app级别的Build.gradle文件解决了这个问题

    【讨论】:

      【解决方案7】:

      转到您的模块级别 build.gradle 文件并将以下行添加到代码中

          defaultConfig {
              ...
              minSdkVersion 15 
              targetSdkVersion 28
              multiDexEnabled true
          }
          ...
      }
      
      dependencies {
        implementation 'com.android.support:multidex:1.0.3'
      }
      

      这很容易解决问题。检查这个documentation

      【讨论】:

        【解决方案8】:

        如下使用multiDexEnabled true。

        {
         minSdkVersion 17
            targetSdkVersion 28
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            multiDexEnabled true
        }
        

        implementation 'com.android.support:multidex:1.0.3'
        

        这个解决方案对我有用。

        【讨论】:

          【解决方案9】:

          我尝试了上面提到的许多解决方案,包括 multiDexEnabled true,但没有一个对我有用。

          这是对我有用的解决方案 - 将此代码复制到 app\build.gradle 文件中

          configurations.all {
              resolutionStrategy.eachDependency { DependencyResolveDetails details ->
                  def requested = details.requested
                  if (requested.group == 'com.android.support' && requested.name != 'multidex') {
                      details.useVersion "${rootProject.ext.supportLibVersion}"
                  }
              }
          }
          

          确保在运行代码之前运行 gradlew clean

          【讨论】:

          • 我改了minSdkVersion,够了
          【解决方案10】:

          同样的事情发生在我身上,我发现我正在更新到 AS 3.0.1,在我完成更新、清理和重建应用程序之后,一切都得到了修复。

          【讨论】:

            【解决方案11】:

            对我来说,解决此错误的原因是更改了我的应用程序的 gradle 依赖项中的一行。

            从此

            compile('com.google.android.gms:play-services-gcm:+') {
                force = true
            }
            

            至此

            compile('com.google.android.gms:play-services-gcm:11.8.0') {
                force = true
            }
            

            【讨论】:

            • 只有那个对我有用。我不需要添加 force = true
            【解决方案12】:

            还要确保您的应用是 MultiDexApplication 的子类

            import android.support.multidex.MultiDexApplication
            
            class App : MultiDexApplication()
            

            或者如果不是子类Application类,添加到AndroidManifest.xml

            <application
              android:name="android.support.multidex.MultiDexApplication"
            

            【讨论】:

              【解决方案13】:

              这对我有用。清洁准备并运行。

              cordova clean android;
              ionic cordova prepare andriod;
              ionic cordova run andriod;
              

              希望对您有所帮助。

              【讨论】:

                【解决方案14】:

                您是否处于 SDK 或平台更新之间? 如果是,请完全完成这些,然后尝试继续。 我通常会更新需要更新的单个软件包,以获取有时可能高达 2.5 GB 的整个更新。执行此完整更新有时会失败。升级到 Android Studio 3.0 后,我进行了许多 SDK 更新,但由于尚未更新所有软件包,因此出现上述错误。一旦我更新了所有软件包,上述错误就消失了。

                【讨论】:

                • 希望您已清除缓存或使缓存无效并重新启动 Android Studio ?对我来说,与以前的版本相比,Android Studio 3 似乎有问题。
                • 有人解决过这个问题吗?过不去!
                【解决方案15】:

                在我的例子中,将 firebase 库版本从 2.6.0 更改为 2.4.2 解决了这个问题

                【讨论】:

                  【解决方案16】:

                  对我来说,问题在于在模块中使用 Java 1.8,而不是在 app 模块中。我将此添加到应用程序构建 gradle 并工作:

                  android{
                      compileOptions {
                          sourceCompatibility JavaVersion.VERSION_1_8
                          targetCompatibility JavaVersion.VERSION_1_8
                      }
                  

                  【讨论】:

                    【解决方案17】:

                    同样的问题。我启用了multidex: 默认配置 { 应用程序ID“xxx.xxx.xxxx” minSdkVersion 24 targetSdkVersion 26 multiDexEnabled 是的

                    我已清除缓存、运行 gradle clean、rebuild、make,尝试确保导入的库中没有冲突(删除了所有传递依赖项)并进行了所有更新。还是:

                    错误:任务 ':app:transformDexArchiveWithExternalLibsDexMergerForDebug' 执行失败。 java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: 无法合并 dex

                    原来构建不喜欢: 实现 'org.slf4j:slf4j-android:1.7.21'

                    【讨论】:

                      【解决方案18】:

                      当Android Studio版本为3.0.1,Gradle版本为4.1,Android PluginVersion为3.0.0时,会遇到这个问题。然后我降级Gradle版本是3.3,Android安卓是零,就没有这个问题了。

                      【讨论】:

                        【解决方案19】:

                        当请求的 SDK 版本与依赖项不匹配时,我遇到了这个问题。您可以单击突出显示的行并单击红色灯泡修复此问题。无需查找实际版本,只需让 IDE 为您解决。并将 google repo 添加到 maven 配置中。

                        【讨论】:

                          【解决方案20】:

                          我收到了同样的错误,在 my 的情况下,当我修复了与我当前正在构建的构建变体不同的构建变体相关的构建错误时,该错误得到了解决。

                          我正在构建我正在查看的构建变体,没有错误,但尝试调试导致app:transformDexArchiveWithExternalLibsDexMergerForDebug 错误。一旦我切换到构建另一个构建变体,我在构建过程中发现了我的错误并修复了它。这似乎解决了我的所有构建变体的app:transformDexArchiveWithExternalLibsDexMergerForDebug 问题。

                          请注意,此错误不是引用的外部模块中,而是在引用外部模块的构建变体的不同源集中。希望这对可能与我看到相同案例的人有所帮助!

                          【讨论】:

                            【解决方案21】:

                            我已经完成并通过在我的代码中完成这项工作解决了这个问题

                            打开->build.gradle 改变价值 来自

                            compile 'com.google.code.gson:gson:2.6.1'
                            

                            compile 'com.google.code.gson:gson:2.8.2'
                            

                            【讨论】:

                              【解决方案22】:

                              要消除这个 Dex 问题,只需实现一个依赖项。 当我们使用来自同一服务器的多个不同服务时,会出现此问题。假设我们在一个项目中使用 ads 和 Firestore,并且两者都有一个存储库 maven。所以我们需要在存储库上调用不同的数据,我们需要 dex 依赖来实现。 新的更新依赖:-

                               implementation 'com.android.support:multidex:1.0.3'
                              

                              我相信它会永久解决您的问题

                              【讨论】:

                              • 它是一个依赖项将其放入 gradle
                              【解决方案23】:
                              1)请添加multiDexEnabled true 2)如果你得到编译错误然后检查你的应用程序级别 build.gradle 天气相同的依赖项是用不同的版本实现的。 3)如果您发现相同的依赖关系,请删除一个。

                              机器人{ compileSdkVersion 28 默认配置 {

                                  minSdkVersion 17
                                  targetSdkVersion 28
                                  versionCode 1
                                  versionName "1.0"
                                  testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
                                  multiDexEnabled true
                              }
                              
                              希望它工作正常 :) 快乐编码
                              

                              【讨论】:

                                【解决方案24】:

                                避免糟糕错误的最简单方法是:

                                -将库combilesdkversion更改为与您的应用程序compilesdkversion相同

                                -将库的 supportLibrary 版本更改为与您的 build.gradle(app) 相同

                                【讨论】:

                                  【解决方案25】:

                                  我也遇到了类似的错误。

                                  问题

                                  解决方案

                                  此问题的主要原因是未启用 multiDex。 所以在Project/android/app/build.gradle中,启用multiDex

                                  有关更多信息,请参阅文档:https://developer.android.com/studio/build/multidex#mdex-gradle

                                  【讨论】:

                                    【解决方案26】:

                                    您现在可以随时通过项目gradle.properties 文件中的此设置恢复到 DX:

                                    android.enableD8=false
                                    

                                    欲了解更多信息,请参阅https://android-developers.googleblog.com/2018/04/android-studio-switching-to-d8-dexer.html

                                    【讨论】:

                                      猜你喜欢
                                      • 2018-08-20
                                      • 2018-10-12
                                      • 2018-04-07
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2018-04-15
                                      • 2018-05-04
                                      相关资源
                                      最近更新 更多