Android Studio 3.0 任务执行失败:无法合并 dex

Posted

技术标签:

【中文标题】Android Studio 3.0 任务执行失败:无法合并 dex【英文标题】:Android Studio 3.0 Execution failed for task: unable to merge dex 【发布时间】:2018-04-15 04:51:24 【问题描述】:

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 【参考方案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 以上:使用实现

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

【讨论】:

【参考方案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

【讨论】:

以上是关于Android Studio 3.0 任务执行失败:无法合并 dex的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio:错误:任务执行失败

Android Studio 构建失败并出现异常任务“:app:dexDebug”执行失败

任务 ':app:dexDebug' Android Studio 执行失败

任务 compilefreeDebugKotlin 的 Android Studio 执行失败

错误:任务':app:transformClassesWithMultidexlistForDebug' android studio执行失败

错误:任务':app:transformClassesWithDexForDebug'在android studio中执行失败