无法合并dex

kodit 发布于 2019-10-30 android 最后更新 2019-10-30 15:13 128 浏览

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

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
但我不知道如何解决这个错误。我搜索了几个小时,但没有成功。 我的项目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_________ 当我没有导入第二个模块(解析器)时,应用程序没有在dex上崩溃,但是当模块没有导入时,应用程序无法正常工作。 :D:D
已邀请:

uut

赞同来自:

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

implementation ("org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version") {
    exclude group: 'org.jetbrains', module: 'annotations'
}
这适用于Android Studio 3.0 Beta 6.有关详细说明,请参阅this答案。

tmodi

赞同来自:

我尝试了以上所有,但没有一个帮助,最后,我发现这对我有用:

android {
    defaultConfig {
       multiDexEnabled true
    }
}

ea_qui

赞同来自:

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

compile 'android.arch.persistence.room:runtime:1.0.0-alpha1'
将其更改为:
compile 'android.arch.persistence.room:runtime:1.0.0'
工作。

wnihil

赞同来自:

尝试这样,它适合我。 在app / 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'
而在模块grow-notification / build.gradle中:
dependencies {
    ....
/** Firebase Start **/
    provided 'com.google.firebase:firebase-messaging:11.4.0'
    provided 'com.firebase:firebase-jobdispatcher:0.6.0'
    /** Firebase End **/
}

caut

赞同来自:

我通过添加导入将结构从第一个模块复制到第二个模块时解决了我的问题。和类似领域的折射器模块包装.. com.example.nameofmodule ... 并检查单元测试的内部

xsed

赞同来自:

如果你正在使用

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'
}
由于客户端lib已经包含公共库,因此它会创建一个重复的类条目,该条目会出错:
Unable to merge dex

oad

赞同来自:

按照Suragch的建议删除.gradle对我来说还不够。另外,我必须执行Build > Clean Project。 请注意,要查看.gradle,您需要切换到左上角导航器中的“项目”视图: Switch to project view

ased

赞同来自:

嗨,我有同样的问题几乎尝试了一切。所以,最后我通过逐行调试一切经过长达6小时的努力解决了。

classpath 'com.google.gms:google-services:3.0.0'
Google-services 3.0不支持带有PlayServiceVersion的Studio 3.0的firebase:11.6.0或更低版本。
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服务。 希望有人能节省他/她的时间。

saut

赞同来自:

当我从com.google.android.gms:play-services:11.2.2更新到com.google.android.gms:play-services:11.4.0时,我遇到了同样的问题。这解决了我:

  1. 清洁
  2. 重建

jvitae

赞同来自:

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

pnon

赞同来自:

添加以下命令:

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

qquasi

赞同来自:

不幸的是,Michel和Suragch的解决方案都不适合我。 我最终要做的只是将我的com.google.firebase:firebase-database回滚到版本10.0.1,因为11.4.0在我的应用程序gradle文件中导致了依赖项不一致警告。

eet

赞同来自:

With Android Studio 3.0 stable build以下步骤对我有用:

  1. 获得SdkManager - > Android Sdk - > Sdk Tools并将Google Play服务更新至最新版本至46。
  2. 清理项目并重建项目。

zfugit

赞同来自:

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

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

qut

赞同来自:

我同意Chris-Jr。如果您使用Firebase嵌入AdMob广告(或者即使您不是),则即使您不将其添加为依赖项,播放服务分析也会包含播放服务广告。由于分析包括版本10.0.1的广告,而不是11.4.0(鼠标在gradle中的提示显示了这一点),谷歌显然在他们的11.4.0推出时犯了一个错误。 我在顶部手动添加了编译'com.google.android.gms:play-services-ads:11.4.0',但只有在我禁用了Instant Run之后: http://stackoverflow.com/a/35169716/530047 因此,它要么回归到10.0.1,要么添加广告并禁用即时运行。 这就是我发现如果有帮助的话。

hquas

赞同来自:

在我的情况下,问题是我在build.gradle文件中实现了两次相同的库。删除重复的条目对我有用。甚至不需要清理,重建项目。

nrerum

赞同来自:

可能的根本原因之一: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')
 }

aeius

赞同来自:

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

oenim

赞同来自:

就我而言,不幸的是,Michel和Suragch的解决方案都不适合我。 所以我通过执行以下操作解决了这个问题: 在gradle:3.0中,编译配置现已弃用,应由implementation或api替换。有关更多信息,您可以read here您可以在Gradle Build Tool阅读官方文档

The compile configuration still exists but should not be used as it will not offer the guarantees that the api and implementation configurations provide.
最好使用实现或api而不是编译 只需用实现替换compile,用debugImplementation调试debugCompile,用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,您需要切换到左上角导航器中的“Project”视图)
  • 删除所有构建文件夹和gradle缓存。
  • 从Build菜单中,按Clean Project按钮。
  • 任务完成后,按“构建”菜单中的“重建项目”按钮。
希望它会有所帮助!

ut_et

赞同来自:

只是添加到上面的解决方案: 确保在多个地方(甚至在同一个文件中)没有重复的依赖项,指向它们的不同版本。