android – 运行应用程序失败,错误“com.android.builder.dexing.DexArchiveMergerException:无法合并dex’

我试图在我的手机上运行我的应用程序,但在build时失败,出现以下错误:

 Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. 

java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

我到目前为止所尝试的,但无济于事: – >清理和重建(重建失败) – >删除./gradle文件和所有项目生成和缓存文件,然后缓存失效

我的项目gradle文件:

 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = '1.1.51' repositories { jcenter() google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0-beta6' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } allprojects { repositories { jcenter() google() mavenCentral() } } task clean(type: Delete) { delete rootProject.buildDir } 

我的应用程序Gradle文件:

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' def daggerVersion = '2.11' android { compileSdkVersion 25 buildToolsVersion "26.0.2" defaultConfig { applicationId "com.connectus.connectus" 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' } } packagingOptions { exclude 'META-INF/INDEX.LIST' } } kapt { generateStubs = true } dependencies { /** * Kotlin */ compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile 'org.jetbrains.anko:anko-support-v4:0.10.1' /** * Unit testing */ testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:1.10.19' testCompile 'org.powermock:powermock-module-junit4:1.6.2' testCompile 'org.powermock:powermock-api-mockito:1.6.2' /** * Android views and widgets */ compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support:recyclerview-v7:25.3.1' compile 'com.android.support:cardview-v7:25.3.1' /** * Retrofit */ compile 'com.squareup.retrofit2:retrofit:2.+' compile 'com.squareup.retrofit2:converter-gson:2.+' compile 'com.squareup.retrofit2:adapter-rxjava:2.+' compile 'io.reactivex:rxjava:1.0.4' compile 'io.reactivex:rxandroid:0.24.0' /** * Glide */ compile 'com.github.bumptech.glide:glide:3.7.0' /** * Dagger 2 */ kapt "com.google.dagger:dagger-compiler:$daggerVersion" compile "com.google.dagger:dagger:$daggerVersion" provided 'org.glassfish:javax.annotation:10.0-b28' /** * Butterknife for view injection */ compile 'com.jakewharton:butterknife:8.8.1' kapt 'com.jakewharton:butterknife-compiler:8.8.1' /** * GSON */ compile 'com.google.code.gson:gson:2.6.2' compile 'org.powermock:powermock-api-mockito:1.6.2' /** * Facebook SDK */ compile 'com.facebook.android:facebook-login:[4,5)' /** * UI Testing */ androidTestCompile 'com.android.support:support-annotations:25.3.1' androidTestCompile 'junit:junit:4.12' testCompile 'com.google.dexmaker:dexmaker:1.2' testCompile 'com.google.dexmaker:dexmaker-mockito:1.2' androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') { exclude module: 'support-annotations' } androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.2') { exclude module: 'support-annotations' exclude module: 'appcompat-v7' exclude module: 'support-v4' exclude module: 'support-v13' exclude module: 'recyclerview-v7' exclude module: 'design' } androidTestCompile('com.android.support.test:runner:0.3') { exclude module: 'support-annotations' } androidTestCompile('com.android.support.test:rules:0.3') { exclude module: 'support-annotations' } compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" implementation 'com.android.support.constraint:constraint-layout:1.0.2' } apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' repositories { mavenCentral() } 

我正在使用Kotlin和Android Studio 3.0.0 beta 6.这是什么问题?

虽然我不完全确定这个原因,但看起来,在挖掘之后 ,kotlin插件中jetbrains包含的注释库和其他地方之间存在版本冲突。 你可以通过运行来validation

gradle :app:assembleDebug --stacktrace

这给了,最后,

 Caused by: com.android.dex.DexException: Multiple dex files define Lorg/intellij/lang/annotations/JdkConstants$PatternFlags; at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661) at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616) at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598) at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) at com.android.dx.merge.DexMerger.merge(DexMerger.java:198) at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61) ... 1 more 

我通过从kotlin依赖项中排除注释库来解决这个问题。 (此后可能需要清理和重建)

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

这适用于我,但我不确定这个解决方案有多好。

添加这个

 defaultConfig { multiDexEnabled true } 

喜欢这个:

 android { compileSdkVersion 25 buildToolsVersion "26.0.2" defaultConfig { applicationId "com.connectus.connectus" minSdkVersion 16 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } defaultConfig { multiDexEnabled true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } packagingOptions { exclude 'META-INF/INDEX.LIST' } 

}

我设法解决它只是包括基本的播放服务,而不是完整的:

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

并删除我的活动中的附加依赖关系:

 -import com.google.android.gms.appindexing.AppIndex; -import com.google.android.gms.common.api.GoogleApiClient; 

(尽管从升级到API 27这可能已经是剩下的了)。