无法合并Dex - Android Studio 3.0

时间:2017-10-26 08:50:44

标签: android android-gradle 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
}

App level 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'

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

22 个答案:

答案 0 :(得分:30)

play-services-auth添加显式依赖项以及firebase-ui-auth依赖项:

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

这是因为firebase-ui-authplay-services-auth具有传递依赖关系,因此必须与相应版本的play-services-auth一起使用。请参阅this explanation

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后,我得到了同样的错误。 Digint进入它,我发现httpmime与文件httpclient-android冲突的传递依赖包括在内。

<强>描述

让我详细解释一下。之前,在使用gradle-tool-version 2.3.3时,我使用httpclient-android来获取并使用名为org.apache.http.entity.ContentType.java的类 扩展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(这是httpmime的隐式传递依赖),再次来自我之前使用的org.apache.httpcomponents:httpclient-android:4.3.5.1

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

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

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

请注意,这就是我的情况。您需要深入了解自己的依赖关系并相应地应用解决方案。

答案 1 :(得分:14)

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

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

在我的情况下,错误&#34;无法合并dex&#34;是由重复的条目引起的 in&#34; com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0&#34;。

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

答案 2 :(得分:3)

我遇到了这个错误:

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

并最终更改我的gradle以解决此问题。

应用\的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
}

这不是理想的,因为它回溯约会,但它对我有用,应该让我到那里直到可能的补丁发布。

答案 3 :(得分:3)

查看 build.gradle (app)中的依赖项 如果你使用2个(或更多)具有相同名称和不同版本的库。 例如(在我的情况下):

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

删除一个,然后清理并重建。另请注意,依赖关系不在 buildscript

答案 4 :(得分:2)

android {
    defaultConfig {
       multiDexEnabled true
    }
}

将此行添加到:gradle文件

答案 5 :(得分:1)

“所有gsm库” 谢谢,它有助于解决我的问题,但不仅是gsm库,但所有谷歌库必须具有相同的版本。 我有这个dexing错误,因为com.android.support:recyclerview-v7的版本与com.android.support:appcompat-v7不同

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

答案 6 :(得分:1)

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

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

在buildscript-&gt;依赖项

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

答案 7 :(得分:1)

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

任何一个,如果我们删除,那么我们可以克服这个错误。

希望这可能有所帮助。

答案 8 :(得分:1)

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

classpath&#39; com.android.tools.build:gradle:2.3.3&#39;

和sycn你的Gradle。

希望这会有所帮助。

答案 9 :(得分:0)

似乎这个错误有很多场景。在我的例子中是build.gradle(app)中的1.8 java编译:

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

我删除了,错误消失了

答案 10 :(得分:0)

我将以下内容从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'

答案 11 :(得分:0)

我确实完全按照下面的屏幕截图提示,将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

答案 12 :(得分:0)

我遇到了与Firebase UI数据库相同的错误。即使按照其他答案中的建议启用multiDex,我仍然会收到错误。然后我才知道Firebase用户界面和Firebase数据库需要与Firebase UI GitHub存储库中提供的版本相同。

Firebase UI GitHub

答案 13 :(得分:0)

添加这个你的gradle:implementation'com.android.support:multidex:1.0.0'

清理项目,然后重建。这有效

答案 14 :(得分:0)

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

答案 15 :(得分:0)

对于那些最近仍在努力解决这个问题并且已添加组件的人。造成这种情况的原因是:

compile&#39; android.arch.lifecycle:extensions:1.0.0&#39; annotationProcessor&#39; android.arch.lifecycle:compiler:1.0.0&#39;

是什么修复了将其更新为

compile&#39; android.arch.lifecycle:extensions:1.1.1&#39; annotationProcessor&#39; android.arch.lifecycle:compiler:1.1.1&#39;

希望有所帮助。

答案 16 :(得分:0)

通过在build.gradle(app module)中为我添加以下代码

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

答案 17 :(得分:0)

我认为这是因为不同的库依赖于同一个子库但版本不同所以排除一个库的依赖性如下:

api (rootProject.ext.dependencies["bindingRecyclerView"]) {
    exclude group: 'com.android.support'
}

答案 18 :(得分:0)

在我的情况下,我必须做三件事:

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

  2. 在app的级别build.gradle

    中设置此项
    android {  
        multiDexEnabled true   
    }
    
  3. 再次在app的级别build.gradle中,添加

    compileOptions{
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
    

答案 19 :(得分:0)

这个link为我解决了这个问题。

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

dependencies:
  flutter:
    sdk: flutter
  cloud_firestore: ^0.8.2 

并在我的IDE终端中运行flutter packages get

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

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

此外,我必须打开android/app/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模拟器上运行了。

如果遇到困难,link的演练会更完整。

答案 20 :(得分:0)

奇怪的情况,但是 multiDexEnabled 没有帮助我,但是在删除 Gradle 目录并重建应用程序后问题解决了。

答案 21 :(得分:-1)

这是我的gradle项目

android {     compileSdkVersion 26     buildToolsVersion“27.0.3”

DbSet<bool>

}