无法合并dex

我有Android Studio Beta。 我创build了一个新的项目,编译我的旧模块,但是当我尝试启动应用程序没有启动消息:

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. 

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

但是我不知道如何解决这个错误。 我GOOGLE了几个小时,但没有成功。

我的项目gradle:

  // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() google() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0-beta6' classpath "io.realm:realm-gradle-plugin:3.7.1" 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 } 

我的应用程序gradle:

  apply plugin: 'com.android.application' android { compileSdkVersion 26 buildToolsVersion "26.0.1" defaultConfig { applicationId "parad0x.sk.onlyforyou" minSdkVersion 21 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { } } compileOptions { targetCompatibility 1.7 sourceCompatibility 1.7 } packagingOptions { exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' } lintOptions { checkReleaseBuilds false } productFlavors { } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) //noinspection GradleCompatible compile 'com.android.support:appcompat-v7:26.0.0-alpha1' compile project(path: ':loginregisterview') } 

和我的模块gradle:

  apply plugin: 'com.android.library' apply plugin: 'realm-android' android { compileSdkVersion 26 buildToolsVersion "26.0.1" defaultConfig { minSdkVersion 19 targetSdkVersion 26 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:appcompat-v7:26.0.2' compile 'com.android.support:support-v4:26.1.0' compile 'com.github.bumptech.glide:glide:4.0.0' testCompile 'junit:junit:4.12' compile project(path: ':parser') } 

我的第二个模块:

  apply plugin: 'com.android.library' apply plugin: 'realm-android' android { compileSdkVersion 26 buildToolsVersion "26.0.1" defaultConfig { minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } realm { syncEnabled = true } useLibrary 'org.apache.http.legacy' buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } productFlavors { } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile 'junit:junit:4.12' // compile 'com.android.support:appcompat-v7:23.1.0' // compile 'com.fasterxml.jackson.core:jackson-core:2.9.0' // compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.0' // compile 'com.fasterxml.jackson.core:jackson-databind:2.9.0' compile 'com.google.code.gson:gson:2.6.2' } 

____________finding_________

当我没有导入第二个模块(parsing器)时,应用程序没有在dex上崩溃,但是当模块没有导入时,app不起作用。 :D:D

Solutions Collecting From Web of "无法合并dex"

com.google.android.gms:play-services:11.2.2com.google.android.gms:play-services:11.4.0时遇到同样的问题。 这为我解决了这个问题:

  1. 清洁
  2. 重build

我尝试了以上所有,没有一个帮助,最后,我find了这个工作对我来说:

 android { defaultConfig { multiDexEnabled true } } 

.gradlebuild议删除.gradle对我来说是不够的。 另外,我必须执行一个Build > Clean Project

请注意,为了查看.gradle ,您需要切换到左上方导航器中的“Project”视图:

切换到项目视图

就我而言,不幸的是,Michel和Suragch的解决scheme都不适合我。

所以我通过下面的方法解决了这个问题:

gradle:3.0中编译configuration现在已经被弃用了,应该被实现api所取代。 欲了解更多信息,你可以在这里阅读您可以阅读在Gradle构build工具的官方文档

编译configuration仍然存在,但不应该使用,因为它不会提供api和实现configuration提供的保证。

最好是使用实现API编译

只要用实现replace编译 ,用debugImplementationdebugging 编译 ,用testImplementation 编译 testCompile,androidTestImplementation 编译 androidtestcompile

例如:而不是这个

 compile 'com.android.support:appcompat-v7:26.0.2' compile 'com.android.support:support-v4:26.1.0' compile 'com.github.bumptech.glide:glide:4.0.0' 

像这样使用

 implementation 'com.android.support:appcompat-v7:26.0.2' implementation 'com.android.support:support-v4:26.1.0' implementation 'com.github.bumptech.glide:glide:4.0.0' 

之后

  • 删除项目中的./gradle文件夹(请注意,为了查看.gradle,您需要切换到左上angular导航器中的“项目”视图)
  • 删除所有构build文件夹和gradlecaching。
  • 从生成菜单,按清理项目button。
  • 任务完成后,从Build菜单中按重build项目button。

希望它会帮助!

  1. 删除.gradle目录。

  2. 再次运行您的应用程序

笔记

  • .gradle目录位于项目的根文件夹中。 (您可能必须先显示隐藏的文件。)
  • 每次我使用Android 3.0更新依赖模块时,我都必须这样做。

添加下面的命令:

 android { ... dexOptions { jumboMode true javaMaxHeapSize "4g" } } 

在我的情况下,问题是因为房间库:

 compile 'android.arch.persistence.room:runtime:1.0.0-alpha1' 

将其更改为:

 compile 'android.arch.persistence.room:runtime:1.0.0' 

工作。

使用Android Studio 3.0稳定构build下面的步骤适用于我:

  1. 得到SdkManager – > Android Sdk – > Sdk工具和更新谷歌播放服务到最新版本到46。
  2. 清理项目并重build项目。

我同意Chris-Jr。 如果您正在使用FirebaseembeddedAdMob广告(或者即使您不是这样),但即使您没有将其作为依赖关系添加到游戏服务分析中,也可以使用Play-services-ads。 谷歌显然在11.4.0推出中犯了一个错误,因为分析包括广告版本10.0.1,而不是11.4.0(在gradle中提示的鼠标显示了这一点)。

我手动添加了编译'com.google.android.gms:play-services-ads:11.4.0'在顶部工作,但只有在禁用即时运行后: http ://stackoverflow.com/a/35169716/530047

所以它要么倒退到10.0.1,要么添加广告并禁用即时运行。 这就是我发现,如果它帮助任何。

嗨,我有同样的问题几乎所有的尝试。 所以,最后我经过6个小时的努力,逐行debugging了一切。

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

Google-services 3.0不支持使用playServiceVersion:11.6.0或更低版本的Studio 3.0的Firebase。

 implementation "com.google.firebase:firebase-messaging:$rootProject.ext.playServiceVersion" implementation "com.google.firebase:firebase-core:$rootProject.ext.playServiceVersion" implementation "com.firebase:firebase-jobdispatcher-with-gcm-dep:$rootProject.ext.jobdispatcherVersion" 

解答:

我已经改变谷歌服务

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

它支持Firebase服务。

希望有人节省他/她的时间。

只需要添加上述解决scheme:

确保你没有重复的依赖关系,指向不同的版本,在多个地方(甚至是在同一个文件中)。

对我来说,它是更新app \ build.gradle中的firebase消息

 compile 'com.google.firebase:firebase-messaging:10.0.1' 

 compile 'com.google.firebase:firebase-messaging:11.4.2' 

可能的根本原因之一:Android Studio导入多模块项目时未正确处理的重复临时依赖关系。 检查你的清单,并删除它们。 对我来说,解决办法就是这样的:

 --- a/project/module/build.gradle +++ b/project/module/build.gradle @@ -21,5 +21,4 @@ android { dependencies { implementation project(':upstream-dependency-project') implementation 'com.android.support:support-v4:18.0.0' - implementation files('libs/slf4j-android-1.6.1-RC1.jar') } 

不幸的是,Michel和Suragch的解决scheme都不适合我。

我最终必须做的只是回滚我的com.google.firebase:firebase-database到版本10.0.1,因为11.4.0在我的应用程序gradle文件中导致依赖性不一致的警告。

在我的情况下,我导入一个'android_support'库两次,所以我删除一个'libs'目录下,并重build。

试试这个,它适用于我。

在应用程序/ build.gradle:

 dependencies { .... compile project(':grow-notification') /** Firebase Start **/ compile 'com.google.firebase:firebase-messaging:11.4.0' compile 'com.firebase:firebase-jobdispatcher:0.6.0' /** Firebase End **/ } apply plugin: 'com.google.gms.google-services' 

而在模块增长通知/ build.gradle:

 dependencies { .... /** Firebase Start **/ provided 'com.google.firebase:firebase-messaging:11.4.0' provided 'com.firebase:firebase-jobdispatcher:0.6.0' /** Firebase End **/ } 

在我的情况下,问题是我在build.gradle文件中两次执行相同的库。 删除重复条目为我工作。 甚至没有需要清理,重build项目。

简单的解决scheme为我工作:

  1. 不要编译/实现相同的依赖关系的两个版本。
  2. 如果要直接从Gradle编译,请不要在项目的libs文件夹中使用.jar文件。 以上的点也适用于这里。

然后清理重build项目。

我有同样的问题。 我通过执行一个干净的,然后从Android Studio 3.0菜单构build项目来解决它:

  1. build立 – >清洁项目
  2. build立 – >重build项目

在我的情况下,这是我已经添加到项目的libs文件夹的gson-2.8.1.jar 。 但是参考已经由SDK提供了。 所以将gson-2.8.1.jar添加到libs文件夹并不是必须的。

当我拿出来gson-2.8.1.jar项目编译没有这个wiered错误。

所以试着修改libs文件夹和依赖关系

 ./gradlew :app:assembleStubLiveDebug -debug -stacktrace 

或类似(从Android Studio获取任务名称( :app:assembleStubLiveDebug ))。

对于大多数情况下这是有效的。 这个对我有用 。 祝你好运,如果它也适用于你。

步骤1:在build.gradle(Module:app)中添加:defaultConfig {multiDexEnabled true}

第2步:执行此操作:Build => Clean Project

第3步:执行此操作:Build =>重build项目

这是一个常见的问题,当你已经添加了两个版本的相同的图书馆…在依赖或在图书馆….这是我的情况,几乎每一次这解决了这个问题..

安装Google Play服务(最新版本)+包括

 android { defaultConfig { multiDexEnabled true } } 

在build.gradle解决了我的问题,确保清理和重build项目!

如果在包含kotlin支持后出现此错误,并且其他解决scheme都不起作用,请尝试将app模块的build.gradle的kotlin依赖项build.gradle为:

 implementation ("org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version") { exclude group: 'org.jetbrains', module: 'annotations' } 

这适用于我在Android Studio 3.0 Beta 6.请参阅此答案进一步的解释。

如果你正在使用

 compile ("org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.1") 

你应该改变它

 compile ("org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.1"){ exclude group:'org.apache.oltu.oauth2' , module: 'org.apache.oltu.oauth2.common' } 

由于客户端库已经包含公共库,因此会创build一个重复的类,这会导致错误:

无法合并dex