Error while merging dex Program type already prese

2019-01-10 23:29发布

问题:

Error when merging the dex

following are the dependencies.

ext {
    anko_version='0.10.5'
    support_lib='1.0.0-alpha1'
    room_lib = "1.1.0"
}
dependencies {

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    implementation "androidx.cardview:cardview:$support_lib"
    implementation "com.google.android.material:material:$support_lib"
    implementation "androidx.appcompat:appcompat:$support_lib"
    implementation "org.jetbrains.anko:anko:$anko_version"
    implementation "androidx.lifecycle:lifecycle-extensions:2.0.0-alpha1"
    implementation "android.arch.persistence.room:runtime:$room_lib"
    annotationProcessor "android.arch.persistence.room:compiler:$room_lib"
}

error

  • What went wrong: Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.

    com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: /app/build/intermediates/transforms/dexBuilder/debug/0.jar, Program type already present: android.support.v4.os.ResultReceiver$1

回答1:

It's because you messed up the dependencies. You have to either fully migrate to AndroidX dependencies or stay on Support library ones. Thus, instead of

implementation "android.arch.persistence.room:runtime:$room_lib"
annotationProcessor "android.arch.persistence.room:compiler:$room_lib"

use

implementation "androidx.room:room-runtime:2.0.0-alpha1"
annotationProcessor "androidx.room:room-compiler:2.0.0-alpha1"

Also be sure to check your gradle.properties project file to contain

android.useAndroidX=true
android.enableJetifier=true

Jetifier helps libraries, which depend on old Support packages, to use the new AndroidX ones.

P. S. I didn't test if Anko works with AndroidX dependencies, but if it doesn't even though those properties in your gradle.properties are enabled, you have no other choices, but fallback to using Support libraries as for now.



回答2:

add following lines on gradle.properties

android.useAndroidX=true
android.enableJetifier=true

and change your room dependencies on build.gradle(moudel:app)

implementation "androidx.room:room-runtime:2.0.0-alpha1"
annotationProcessor "androidx.room:room-compiler:2.0.0-alpha1"


回答3:

Migrate the dependencies to androidx dependencies. And in gradle.properties add the below lines (If not created already, create the file in root folder).

android.useAndroidX=true
android.enableJetifier=true

Hope this helps.



回答4:

I had the same problem.

Do not mix dependencies styles(androidx and com.android.support) in your project.

In your code try to replace

implementation "androidx.appcompat:appcompat:$support_lib"

with

implementation "com.android.support:appcompat-v7:$version_of_support_library"

A full list of dependencies migration you can find here .

I should use old style dependency because I needed WorkManager and according to official documentation WorkManager currently without AndroidX dependencies.

WorkManager classes are already in the androidx.work package, but currently depend on Support Library 27.1, and associated Arch component versions. Version of WorkManager with AndroidX dependencies will be released in the future.



回答5:

This is what worked for me was Refactor -> Migrate to AndroidX option in Android Studio. This seemed to resolve any things I may have missed when trying to do the AndroidX migration one dependency at a time. https://developer.android.com/jetpack/androidx/migrate



回答6:

Check the package which clashes with the com.android.support and exclude it from that package. For me, I was using androidx packages and also FCM, where there was a clash. So, this fixed for me:

implementation ('com.google.firebase:firebase-core:16.0.4') {
    exclude group: 'com.android.support'
}


回答7:

for my instance i had upgraded from implementation 'com.github.bumptech.glide:glide:4.0.0 to implementation 'com.github.bumptech.glide:glide:4.7.1'



回答8:

What worked for me was Refactor -> Migrate to AndroidX option in Android Studio. This seemed to resolve any things I may have missed when trying to do the AndroidX migration one dependency at a time. https://developer.android.com/jetpack/androidx/migrate