无法合并Dex-Android Studio 3.0

当我在稳定频道中将Android Studio更新为3.0并运行该项目时,我开始收到以下错误消息。

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

我尝试清理和重建项目,但是没有成功。 任何帮助将不胜感激。

项目级别build.gradle

buildscript {
repositories {
    jcenter()
    google()
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.0.0'
    classpath 'com.google.gms:google-services:3.1.0'


    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
} 
allprojects {
repositories {
    jcenter()
    google()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}

应用程序级别build.gradle

apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion '26.0.2'
defaultConfig {
    applicationId "com.med.app"
    minSdkVersion 21
    targetSdkVersion 26
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    resConfigs "auto"
    multiDexEnabled true

}
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'
testCompile 'junit:junit:4.12'

//appcompat libraries
compile 'com.android.support:appcompat-v7:26.1.0'
compile 'com.android.support:design:26.1.0'


//butterknife
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

//picasso
compile 'com.squareup.picasso:picasso:2.5.2'

//material edittext
compile 'com.rengwuxian.materialedittext:library:2.1.4'

// Retrofit & OkHttp & and OkHttpInterceptor & gson
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.squareup.okhttp3:logging-interceptor:3.8.0'

// FirebaseUI for Firebase Auth
compile 'com.firebaseui:firebase-ui-auth:3.1.0'
}
apply plugin: 'com.google.gms.google-services'

我已经尝试了所有给出的答案,但无法解决此错误。 请帮忙。

21个解决方案
30 votes

将显式依赖项与play-services-auth依赖项一起添加到play-services

// FirebaseUI for Firebase Auth
    compile 'com.firebaseui:firebase-ui-auth:3.1.0'
    compile 'com.google.android.gms:play-services-auth:11.4.2'

这是因为play-services具有对play-services-auth的传递依赖,并且必须与play-services-auth的相应版本一起使用。请参阅此说明。

firebase-ui-auth
|--- com.google.firebase:firebase-auth
|--- com.google.android.gms:play-services-auth

Gradle构建工具的早期版本不包含传递依赖项,因此现在的版本可能与其他play-services版本发生冲突。

我的问题得到了解释和回答(万一有人想知道)

当您升级到Android Studio 3.0并将gradle构建工具版本更新为3.0.0时,依赖项的编译现在与早期版本中的执行情况有所不同。

我最近遇到了同样的问题。 我正在使用这些依赖项,这些依赖项在Gradle 2.3.3版中运行良好:

implementation 'org.apache.httpcomponents:httpmime:4.3.6'
implementation 'org.apache.httpcomponents:httpclient-android:4.3.5.1'

升级到gradle-build-version 3.0.0之后,我遇到了同样的错误。 从数字上看,我发现包含ContentType.java的传递依赖与文件org.apache.httpcomponents:httpcore:4.3.6冲突。

描述

让我详细解释一下。 之前,在使用gradle-tool-version 2.3.3时,我使用ContentType.java来获取并使用名为org.apache.httpcomponents:httpcore:4.3.6的类扩展org.apache.httpcomponents:httpmime:4.3.6的可传递依赖关系,表明它具有org.apache.httpcomponents:httpcore:4.3.6,这与我要使用的包相同。 但是在编译或同步构建时,它不包括org.apache.http.entity.ContentType.java,因此我需要添加包括ContentType.java的此依赖项:

implementation 'org.apache.httpcomponents:httpclient-android:4.3.5.1'

在那之后一切都很好。

将gradle-build-version升级到3.0.0后,情况发生了变化。 现在,它包括所有传递依赖项。 因此,在使用带有gradle-build-tool版本3.0.0的最新Android Studio进行编译时,我的ContentType.java被编译了两次。 一次来自org.apache.httpcomponents:httpcore:4.3.6(这是httpclient-android的隐式传递依赖项),一次又来自httpmime(我之前使用过)。

要解决此问题,我必须删除现有的httpclient-android依赖项,因为httpmime本身将获取我的应用程序所需的相关类。

针对我的情况的解决方案:仅使用必需的依赖项并删除httpclient-android

implementation 'org.apache.httpcomponents:httpmime:4.3.6'

请注意,这只是我的情况。 您需要挖掘自己的依赖性并相应地应用解决方案。

Bhavesh Patadiya answered 2020-08-12T04:08:04Z
14 votes

首先,我按照前面的评论中的建议启用了multidex。

然后,如果错误仍然存在,请打开Gradle Console(单击“消息”部分左侧的“显示控制台输出”图标),然后单击链接以使用Debug / Info / Stack选项重新编译。这将显示有关该错误的更多详细信息。

就我而言,错误“无法合并dex”是由重复的条目引起的在“ com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0”中。

我从项目中手动删除了冲突的库,并执行了“重建项目”(强制重新加载库)。 这解决了问题。

Pablo Alfonso answered 2020-08-12T04:08:39Z
3 votes

我有这个错误:

com.android.builder.dexing.DexArchiveMergerException:无法合并dex

并最终变回我的gradle以解决此问题。

app \ build.gradle

android {
compileSdkVersion 25
//buildToolsVersion '26.0.2'
buildToolsVersion '25.0.3'//<< Changed back to old version before my studio 3.0 update
defaultConfig { ....

。\ build.gradle

buildscript {
repositories {
    jcenter()
    google()
}
dependencies {
    classpath 'com.android.tools.build:gradle:2.3.3' //<< Changed back to old version before my studio 3.0 update
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

这不是理想的方法,因为它要追溯到以前,但这是对我有用的方法,应该将我带到那里,直到可能的补丁发布为止。

Alex Hermon answered 2020-08-12T04:09:21Z
3 votes

在build.gradle(应用程序)中检查依赖项如果您使用的是2个(或更多)具有相同名称和不同版本的库。例如(以我为例):

implementation files('src/main/libs/support-v4-24.1.1.jar')
implementation 'com.android.support:support-v4:27.0.2'

取出其中一个,然后清洁并重建。 另请注意,依赖项不在buildscript之外。

JeffNhan answered 2020-08-12T04:09:45Z
2 votes
android {
    defaultConfig {
       multiDexEnabled true
    }
}

将此行添加到:gradle文件

Vaibhav pandey answered 2020-08-12T04:10:06Z
1 votes

我有同样的问题我解决了它:

classpath 'com.google.gms:google-services:3.0.0'

在buildscript-> dependencies中

build.gradle

在我的文件中,我有:

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}
GeoPamplona answered 2020-08-12T04:10:39Z
1 votes

只需将您的类路径更改为:

类路径'com.android.tools.build:gradle:2.3.3'

并同步您的Gradle。

希望这会有所帮助。

Gaurav answered 2020-08-12T04:11:12Z
1 votes

有时,当“ libs”文件夹中存在相同的.jar库文件,并且同时我们试图通过在应用gradle文件中添加“ compile”行来获取源代码时,会发生此错误。

如果删除了其中的任何一个,我们都可以克服此错误。

希望这会有所帮助。

suhasini answered 2020-08-12T04:11:41Z
1 votes

“所有gsm库”谢谢,它有助于解决我的问题,但不仅是gsm库,而且所有Google库都必须具有相同的版本。我遇到此问题,因为com.android.support:recyclerview-v7与com.android.support:appcompat-v7的版本不同

Android studio在build.gradle文件中用红色下划线显示这些行。

user2466053 answered 2020-08-12T04:12:07Z
0 votes

我确实按照以下屏幕截图中的提示进行操作,将11.0.4更改为11.8.0

compile 'com.google.android.gms:play-services-base:11.8.0'
compile 'com.google.android.gms:play-services:11.8.0'

它工作正常

Unable to merge dex

mohammed alshaarawi answered 2020-08-12T04:12:31Z
0 votes

似乎此错误有很多情况。 在我的情况下,是build.gradle(app)中的1.8 Java编译:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

我删除了,错误消失了

Felipe Costa answered 2020-08-12T04:12:56Z
0 votes

我将下面的内容从11.6.0更改为11.8.0,它可以正常工作。

compile 'com.google.android.gms:play-services-ads:11.6.0'

implementation 'com.google.android.gms:play-services-ads:11.8.0'
Zakaria Bin Abdur Rouf answered 2020-08-12T04:13:17Z
0 votes

我在Firebase UI数据库中遇到了相同的错误。 即使在按照其他答案中的建议启用multiDex之后,我仍然会收到错误消息。 然后我才知道,Firebase UI和Firebase数据库需要具有与Firebase UI GitHub存储库上给出的相同的对应版本。

Firebase UI GitHub

Rohan Lekhwani answered 2020-08-12T04:13:42Z
0 votes

将此添加到您的gradle中:实现'com.android.support:multidex:1.0.0'

清理项目,然后重建。

ArunKumar answered 2020-08-12T04:14:07Z
0 votes

这可能也为时已晚,但我想我也有答案。 根据我最近的试用,在编译应用程序时,请确保您在同一项目中没有jar文件和相同程序包的an3007617326897431551552。 就我而言,我在同一项目中有implementation 'org.jsoup:jsoup:1.11.2'Jsoup jar。 新秀的错误,但是,我学会了。

Granson answered 2020-08-12T04:14:27Z
0 votes

对于那些仍在苦苦挣扎并增加了组件的用户。 对我来说是什么原因导致添加:

编译'android.arch.lifecycle:extensions:1.0.0'注解处理器'android.arch.lifecycle:compiler:1.0.0'

修复它的原因是将其更新为

编译'android.arch.lifecycle:extensions:1.1.1'注解处理器'android.arch.lifecycle:compiler:1.1.1'

希望有帮助。

SlickDev answered 2020-08-12T04:15:06Z
0 votes

我认为这是因为不同的库依赖于相同的子库,但版本不同,因此排除了一个库的依赖,例如:

api (rootProject.ext.dependencies["bindingRecyclerView"]) {
    exclude group: 'com.android.support'
}
like answered 2020-08-12T04:15:26Z
0 votes

就我而言,我必须做三件事:

  1. 当我使用Firebase时,请确保Firebase和Google Play服务具有相同的版本。最初的play服务具有较低的版本。主要是12.0.1版本帮助

  2. 在应用程序的级别build.gradle中进行设置

    compileOptions{
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
    
  3. 再次在应用程序级别的build.gradle中,添加

    compileOptions{
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
    
Javac Ds answered 2020-08-12T04:16:03Z
0 votes

通过在build.gradle(app模块)中添加以下代码,对我有用

android {
      defaultConfig {
          multiDexEnabled true
      }
}

dependencies {
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    implementation 'com.android.support:support-v4:26.1.0'
}
Yash Jain answered 2020-08-12T04:16:23Z
0 votes

此链接为我解决了这个问题。

首先,我在pubspec.yaml中将依赖项设置为

dependencies:
  flutter:
    sdk: flutter
  cloud_firestore: ^0.8.2 

并在我的IDE终端中运行了android/build.gradle

另外,我还必须更改最低目标SDK版本:

  1. 打开android / app / build.gradle,然后找到显示以下内容的行minSdkVersion 16。
  2. 将该行更改为minSdkVersion 21。
  3. 保存文件。

另外,我必须打开android/build.gradle,然后将以下行添加为文件中的最后一行:apply plugin: 'com.google.gms.google-services'

接下来,我必须打开android/build.gradle,然后在buildscript标记内,添加一个新的依赖项:

buildscript {
   repositories {
       // ...
   }

   dependencies {
       // ...
       classpath 'com.google.gms:google-services:3.2.1'   // new
   }
}

之后,我的应用程序终于在android模拟器上运行了。

如果遇到问题,该链接将提供更完整的演练。

Casey Schneider answered 2020-08-12T04:17:29Z
-1 votes

这是我的毕业设计

android { 编译版本26 buildToolsVersion“ 27.0.3”

defaultConfig {
    applicationId "net.mobilegts.candyjump"
    minSdkVersion 14
    targetSdkVersion 23

    ndk {
        moduleName "player_shared"
    }
}
sourceSets {
    main {
        jni.srcDirs = []
    }
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

}

Midou Dz answered 2020-08-12T04:17:58Z
translate from https://stackoverflow.com:/questions/46949761/unable-to-merge-dex-android-studio-3-0