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


85

android studio在执行构建时出现以下构建错误:

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

我的app: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支持
Sudheesh R

并尝试清洁,重建项目
Sudheesh R

我建议您编辑问题并发布Gradle控制台的整个输出,而不仅仅是那一行。问题的详细信息位于输出中的其他位置。
CommonsWare

@CommonsWare我张贴了我的整个错误..仅两行而已。
安格拉吉'17

2
尝试禁用即时运行清理您的项目并添加android {defaultConfig {multiDexEnabled true}}
Tara

Answers:


65

对于基于Cordova的项目cordova clean android,请按照@mkimmet的建议再次运行,然后再进行构建。


1
有人请将此答案标记为正确。它解决了这个问题。
pamekar '18 -10-13

1
对我来说,安装“ cordova-plugin-androidx”和“ cordova-plugin-androidx-adapter”解决了该问题
ssz

57

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

添加external library。时要小心。

我花了2天的时间解决这个问题,终于按照以下步骤解决了。

  • 确保您所有的支持库是一样compileSdkVersion的你build.gradle(Module:app)在我的情况下,它是26在此处输入图片说明

  • 在您的defaultConfig类别中,输入multiDexEnabled true。这是重要的部分。multiDexEnabled真实图像

  • 转到文件| 设置| 构建,执行,部署| 即时运行,并尝试启用/禁用即时运行热插拔...,然后单击 启用即时运行到热插拔...图片

  • Sync 您的项目。

  • 最后,转到Build | 单击“重建项目”

  • 注意:“重建项目”首先清除,然后生成项目。


对我有帮助,谢谢。
Sumit Saxena

很高兴听你这样说。快乐的Androiding。
Niamatullah Bakhshi

1
@YajliMaclo太好了!
Niamatullah Bakhshi


25

解析度:

请参考此链接:由于有多种选项可根据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. 也为更多的信息,关于为什么会发生,请阅读链接中的第一款,它会彻底解释为什么?并且请问这个警告的意思。

24

只需尝试执行“构建->清洁项目”。那为我解决了问题。


5
感谢我通过运行cordova clean android在Ionic / Cordova项目中为我工作,同时我还安装了cordova-android-support-gradle-release插件。
mkimmet

当简单的东西可以解决问题时就喜欢它!谢谢!
–tonejac

这在使用React Native时为我修复了它。
Michael Auderer '18

谢谢,这是解决此问题的最简单方法,我花了3天的时间解决此问题,您的回答解决了所有问题。再次感谢你,我的兄弟!
gautamsinh mori

谢谢。在Android Studio 4.1上对我有帮助。拯救了我的一天。
阿提夫

7

对我来说

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'
    }

进入应用程序级别Build.gradle文件即可解决此问题


5

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

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

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

那很容易解决了问题。查看此文档


4

如下使用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'

该解决方案为我工作。


4

我尝试了许多上述解决方案,包括true的multiDexEnabled,但这些解决方案都不适合我。

这是对我有用的解决方案-将此代码复制到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


我更改了minSdkVersion,就够了
Special特别先生

2

同样的事情发生在我身上,发现我正在升级到AS 3.0.1,在进行更新,清理和重建应用程序之后,所有问题都已修复。


2

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

从这里

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

对此

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

只有那对我有用。我不需要加力= true
Paulo Linhares-Packapps

1

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

import android.support.multidex.MultiDexApplication

class App : MultiDexApplication()

或如果不继承应用程序类,则添加到AndroidManifest.xml

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

0

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


希望您已清除或使缓存无效并重新启动Android Studio?对我来说,与以前的版本相比,Android Studio 3似乎有问题。
Vineet Jain

有人解决过这个问题吗?无法超越!
68060

0

就我而言,将Firebase库版本从2.6.0更改为2.4.2可以解决此问题


0

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

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

0

同样的问题。我已启用multidex:defaultConfig {applicationId“ xxx.xxx.xxxx” minSdkVersion 24 targetSdkVersion 26 multiDexEnabled true

我已经清除了缓存,运行了gradle清理,重建,制作,试图确保导入库中没有冲突(删除了所有传递依赖项)并进行了所有更新。仍然:

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

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


0

当Android Studio的版本为3.0.1,Gradle版本为4.1和Android PluginVersion为3.0.0时,它将遇到此问题。然后我降级了Gradle Version为3.3,Android Android为零,没有这样的问题。


0

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


0

我收到了相同的错误,在我的情况下,当我修复了一个与我当前正在构建的构建版本不同的构建错误时,该错误已得到解决。

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

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


0

我已经完成并通过在我的代码中完成此工作来解决此问题

打开-> build.gradle将值从

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

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

0

要消除此Dex问题,只需实现一个依赖项即可。当我们从同一服务器使用多个不同的服务时,会发生此问题。假设我们在一个项目中使用ads和Firestore,并且两者都有一个仓库Maven。因此,我们需要在存储库上调用不同的数据,我们需要实现dex依赖关系。新的更新依赖项:

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

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


它的依赖使它陷入了困境
Pradeep Sheoran

0
1)请添加multiDexEnabled true
2)如果遇到编译错误,请检查您的应用程序级别build.gradle,并在不同版本中实现相同的依赖项。
3)如果发现相同的依赖项,请删除一个。

android {compileSdkVersion 28 defaultConfig {

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

0

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

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

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


0

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

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

希望能帮助到你。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.