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

时间:2017-11-02 15:34:35

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

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网站完成了示例并解决了

24 个答案:

答案 0 :(得分:54)

对于基于Cordova的项目,请在再次构建之前运行cordova clean android,如@mkimmet所示。

答案 1 :(得分:36)

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

添加external library时要小心。

我花了2天时间解决这个问题,最后按照这些步骤解决了问题。

  • 确保所有支持库与compileSdkVersion的{​​{1}}相同,在我的情况下为build.gradle(Module:app)enter image description here

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

  • 转到文件 | 设置 | 构建,执行,部署 | 即时运行并尝试启用/禁用即时运行热插拔...并点击好的 Enable Instant Run to Hot swap... Image

  • 26您的项目。

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

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

答案 2 :(得分:23)

尝试在gradle中添加它

    android {
      defaultConfig {
        multiDexEnabled true
        }
   }

答案 3 :(得分:18)

只需尝试“Build - > Clean Project”。这解决了我的问题。

答案 4 :(得分:11)

分辨率:

引用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:使用编译

minSdkVersion大于20:使用实现

  1. 我希望这会有所帮助,如果解决了您的问题,请投票,谢谢。
  2. 有关更多信息, 为什么发生 的详情,请阅读链接,它将彻底解释原因?此警告是什么意思。

答案 5 :(得分: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 文件解决了问题

答案 6 :(得分:4)

如上所述,我尝试了许多解决方案,其中包括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

答案 7 :(得分:2)

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

答案 8 :(得分:2)

按如下所示使用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 :(得分:1)

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

来自

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

到此

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

答案 10 :(得分:1)

还要确保您的应用子类化了MultiDexApplication

import android.support.multidex.MultiDexApplication

class App : MultiDexApplication()

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

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

答案 11 :(得分:0)

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

android.enableD8=false

有关更多信息,请参见https://android-developers.googleblog.com/2018/04/android-studio-switching-to-d8-dexer.html

答案 12 :(得分:0)

我也遇到类似的错误。

问题

enter image description here

解决方案

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

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

enter image description here

答案 13 :(得分:0)

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

    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 28
        multiDexEnabled true
    }
    ...
}

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

那很容易解决了这个问题。选中此documentation

答案 14 :(得分:0)

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

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

希望有帮助。

答案 15 :(得分:0)

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

-与您的应用程序compilesdkversion一样更改库combilesdkversion

-更改库的supportLibrary版本与build.gradle(app)

相同

答案 16 :(得分:0)

1)Please add multiDexEnabled true
2)if you get compilation error then check your app level build.gradle weather same dependencies are implemented with different versions.
3)Remove one if you find same dependencies.

android {     编译版本28     defaultConfig {

    minSdkVersion 17
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}
hope it works fine :) Happy Coding

答案 17 :(得分:0)

要删除此Dex问题,只需实现一个依赖项。 当我们从同一服务器使用多个不同的服务时,会发生此问题。假设我们在项目中使用广告和Firestore,并且都有一个存储库maven。所以我们需要在存储库上调用不同的数据,我们需要dex依赖来实现。 新的更新依赖关系: -

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

我确信它会解决您的问题

答案 18 :(得分:0)

我已完成并通过在我的代码中执行此作业来解决此问题

打开 - &gt; build.gradle 改变价值 来自

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

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

答案 19 :(得分:0)

我收到了同样的错误,在我的情况下,当我修复了与我当前构建的构建版本不同的构建版本错误时,错误得以解决。

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

请注意,此错误不是引用的外部模块中,而是在引用外部模块的构建变体的不同源集中。希望对可能和我有同样情况的人有所帮助!

答案 20 :(得分:0)

当Android Studio版本为3.0.1,Gradle版本为4.1且Android PluginVersion为3.0.0时,会遇到此问题。然后我降级Gradle版本是3.3,Android Android是零,没有这样的问题。

答案 21 :(得分:0)

同样的问题。我启用了multidex:     defaultConfig {         applicationId&#34; xxx.xxx.xxxx&#34;         minSdkVersion 24         targetSdkVersion 26         multiDexEnabled true

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

  

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

原来构建不喜欢: 实施&#39; org.slf4j:slf4j-android:1.7.21&#39;

答案 22 :(得分:0)

对我来说,问题是在模块中使用Java 1.8,但在app模块中没有。我将此添加到app build gradle并工作:

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

答案 23 :(得分:0)

您介于SDK或平台更新之间吗? 如果是完全完成那些,然后尝试继续。 我通常会更新需要更新的各个软件包,以便进行有时可能高达2.5 GB的整个更新。执行此完整更新有时会失败。一旦我升级到Android Studio 3.0,我就有了一些SDK更新,并且因为所有软件包都没有更新而得到上述错误。一旦我更新了所有包,上面的错误就消失了。