324 votes

Impossible de fusionner les dex

J'ai Android Studio Beta. J'ai créé un nouveau projet avec la compilation de mes anciens modules mais lorsque j'ai essayé de lancer l'application, elle ne s'est pas lancée avec le message :

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

com.Android.builder.dexing.DexArchiveMergerException : Impossible de fusionner les dex

Mais je ne sais pas comment résoudre cette erreur. J'ai cherché sur Google pendant des heures, mais sans succès.

Mon projet 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
}

Mon application 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')

}

Et mon module 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')

}

Mon deuxième module :

     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_________

Lorsque je n'ai pas importé le deuxième module (parser), l'application ne s'est pas plantée sur le dex, mais lorsque le module n'a pas été importé, l'application n'a pas fonctionné. :D :D

6 votes

Si quelqu'un rencontre le même problème dans la version stable d'Android Studio 3.0, je vous recommande vivement de consulter la réponse suivante stackoverflow.com/questions/46949761/ et voir si cela peut vous aider.

1 votes

J'ai eu le même problème et j'ai suivi toutes les méthodes qui sont mentionnées sur cette page, mais cela ne m'a pas aidé. Je suis donc allé dans le gradle et j'ai maintenu le curseur sur chaque bibliothèque pour vérifier si leur nouvelle version est disponible ou non. ceux qui ont une nouvelle version, je les ai mis à jour, synchronisé le gradle et exécuté. cela a fonctionné.

359voto

itzhar Points 36

J'ai essayé tout ce qui précède et aucun d'entre eux n'a aidé. Finalement, j'ai trouvé ce travail pour moi :

app/build.gradle :

android {
    defaultConfig {
       multiDexEnabled true
    }
}

11 votes

Merci. Je pense que le problème était que la plupart des réponses ne tiennent pas compte de l'inclusion de fichiers JAR provenant d'autres sources et que vous ne pouvez pas reconstruire. multiDex semble permettre de combiner des codes autrement incompatibles.

2 votes

Cette solution a fonctionné pour moi, mais en plus, j'ai dû activer explicitement le multidex pour les API <= 21 developer.Android.com/studio/build/multidex.html

2 votes

Malgré le fait qu'il soit plus pertinent que la réponse acceptée, je reçois toujours le message "Impossible de fusionner dex".

301voto

Zohidjon Akbarov Points 3047

J'ai eu le même problème lors de la mise à jour de com.google.android.gms:play-services:11.2.2 a com.google.android.gms:play-services:11.4.0 . Cela a résolu le problème pour moi :

  1. nettoyer
  2. reconstruire

0 votes

Vous ne faites que retarder le vrai problème avec cette solution. La version 11.4.0 contient probablement moins de méthodes. Voir ma réponse ci-dessous. Vous obtiendrez cette erreur dans la prochaine dépendance que vous ajouterez, je suppose.

3 votes

Cela résout mon problème, où multiDexEnabled true seul n'a pas

30 votes

Même problème avec com.google.Android.gms:play-services-location:11.6.0 ... ce n'est pas une solution valide

61voto

Mir-Ismaili Points 1588

Faites attention aux avertissements !

Parfois, il suffit d'éliminer avertissements et le erreur disparaîtra automatiquement. Voir le cas particulier ci-dessous :


J'avais ces deux dépendances dans mon niveau de module build.gradle fichier :

implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:recyclerview-v7:27.0.2'

et Studio avait prévenu ( en plus du problème de fusion dex ):

Tous com.android.support doivent utiliser exactement la même spécification de version (le mélange de versions peut entraîner des pannes d'exécution). Versions trouvées 27.0.2 , 21.0.3 . Voici quelques exemples com.android.support:animated-vector-drawable:27.0.2 y com.android.support:support-v4:21.0.3

J'ai donc déterminé explicitement la version de com.android.support:support-v4 (voir aquí pour plus de détails) et les deux problèmes (l'avertissement et celui relatif à la fusion des dex) résolu :

implementation 'com.android.support:support-v4:27.0.2'  // Added this line (according to above warning message)
implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:recyclerview-v7:27.0.2'

Voir les commentaires ci-dessous pour d'autres situations similaires.

1 votes

Merci, cela a réglé le problème pour moi. Il était initialement causé par l'ajout de eu.inloop:androidviewmodel:1.3.4

2 votes

Exactement, j'aurais juste aimé que l'erreur soit plus précise.

1 votes

Merci beaucoup. J'avais le même problème. J'utilisais la v26, j'ai mis à jour vers le sdk 27 et j'ai résolu le problème.

37voto

King of Masses Points 12228

Dans mon cas, Malheureusement, ni Michel, ni Suragch solutions a fonctionné pour moi.

Donc, j'ai résolu ce problème en procédant comme suit:

Dans gradle:3.0 la compilation de configuration est maintenant obsolète et doit être remplacé par la mise en œuvre ou de l'api. Pour plus d'informations, vous pouvez lire ici, Vous pouvez lire les docs officielles à l' Outil Build Gradle

La compilation de configuration existe encore, mais il ne devrait pas être utilisée, car elle n'offre pas les garanties que l'api et la mise en œuvre les configurations de fournir.

il est préférable d'utiliser de la mise en œuvre ou de l'api plutôt compiler

il suffit de remplacer le compiler avec la mise en œuvre, debugCompile avec debugImplementation, testCompile avec testImplementation et androidtestcompile avec androidTestImplementation

Par exemple: au Lieu de ce

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'

utiliser comme ceci

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'

Après que

  • Supprimer la .gradle dossier à l'intérieur de votre projet ( à Noter que, pour voir .gradle, vous devez passer en mode "Projet" afficher dans le navigateur en haut à gauche )
  • Supprimer tous les de construire des dossiers et de la gradle cache.
  • Dans le menu générer, appuyez sur la Propre Projet de bouton.
  • Après la tâche est terminée, appuyez sur le Projet de Reconstruction de bouton dans le menu générer.

Espérons qu'il sera aide !

2 votes

Merci, tout ce que j'ai eu à faire était de changer la compilation en implémentation et il s'est construit avec succès, je n'ai pas eu à compléter les autres étapes. La compilation a commencé à échouer après que j'ai mis à jour le SDK de Facebook.

2 votes

Cela a fonctionné pour moi - pourquoi ?

1 votes

Le dossier à supprimer doit être .gradle et non ./gradle

32voto

Suragch Points 197
  1. Supprimer le .gradle répertoire.

  2. Exécutez à nouveau votre application.

Notes

  • El .gradle se trouve dans le dossier racine de votre projet. (Vous devrez peut-être d'abord afficher les fichiers cachés).
  • Je dois le faire à chaque fois que je mets à jour un module de dépendance en utilisant Android 3.0. (Les versions plus récentes d'Android Studio 3 semblent avoir résolu le problème).

4 votes

Cela m'a aidé quand j'ai aussi fait un Invalidate Cache et un redémarrage

0 votes

J'étais incrédule quand cela a résolu mon problème j'avais essayé de tout mettre à jour, de supprimer tous les mots-clés de compilation, de mettre à jour quelques versions d'ilb suspectes quand j'ai finalement fait cela, cela a fonctionné .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X