Impossible de fusionner 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 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 se classe:

  // 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 se classe:

  apply plugin: 'com.android.application' android { comstackSdkVersion 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 { } } comstackOptions { targetCompatibility 1.7 sourceCompatibility 1.7 } packagingOptions { exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' } lintOptions { checkReleaseBuilds false } productFlavors { } } dependencies { comstack fileTree(include: ['*.jar'], dir: 'libs') androidTestComstack('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) //noinspection GradleCompatible comstack 'com.android.support:appcompat-v7:26.0.0-alpha1' comstack project(path: ':loginregisterview') } 

Et mon module se classe:

  apply plugin: 'com.android.library' apply plugin: 'realm-android' android { comstackSdkVersion 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 { comstack fileTree(dir: 'libs', include: ['*.jar']) androidTestComstack('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) comstack 'com.android.support:appcompat-v7:26.0.2' comstack 'com.android.support:support-v4:26.1.0' comstack 'com.github.bumptech.glide:glide:4.0.0' testComstack 'junit:junit:4.12' comstack project(path: ':parser') } 

Mon deuxième module:

  apply plugin: 'com.android.library' apply plugin: 'realm-android' android { comstackSdkVersion 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 { comstack fileTree(dir: 'libs', include: ['*.jar']) androidTestComstack 'junit:junit:4.12' // comstack 'com.android.support:appcompat-v7:23.1.0' // comstack 'com.fasterxml.jackson.core:jackson-core:2.9.0' // comstack 'com.fasterxml.jackson.core:jackson-annotations:2.9.0' // comstack 'com.fasterxml.jackson.core:jackson-databind:2.9.0' comstack 'com.google.code.gson:gson:2.6.2' } 

____________découverte_________

Lorsque je n’ai pas importé le deuxième module (parsingur), l’application n’a pas planté sur dex mais lorsque le module n’était pas importé, l’application ne fonctionnait pas. : D: D

J’ai eu le même problème lorsque je mets à jour de com.google.android.gms:play-services:11.2.2 à com.google.android.gms:play-services:11.4.0 . Cela l’a résolu pour moi:

  1. nettoyer
  2. reconstruire

J’ai essayé tout ce qui précède et aucun d’entre eux ne m’aide, enfin, je trouve ce travail pour moi:

app / build.gradle:

 android { defaultConfig { multiDexEnabled true } } 

Parfois, il vous suffit de faire attention aux AVERTISSEMENTS. Dans mon cas particulier, j’avais ces deux dépendances dans mon fichier build.gradle niveau du build.gradle :

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

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

Toutes les bibliothèques com.android.support doivent utiliser exactement la même spécification de version (les versions de mixage peuvent entraîner des pannes à l’exécution). Versions trouvées 27.0.2 , 21.0.3 . Les exemples incluent com.android.support:animated-vector-drawable:27.0.2 et com.android.support:support-v4:21.0.3

J’ai donc explicitement déterminé la version de com.android.support:support-v4 (voir ici pour plus de détails) et les deux problèmes résolus (avertissement IDE et lié à la fusion dex) :

 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 des autres ci-dessous pour d’autres situations similaires.

Dans mon cas, malheureusement, ni les solutions de Michel ni de Suragch n’ont fonctionné pour moi.

J’ai donc résolu ce problème en procédant comme suit:

Dans gradle: 3.0, la configuration de compilation est maintenant obsolète et devrait être remplacée par implémentation ou api . Pour plus d’informations, vous pouvez lire ici Vous pouvez lire les documents officiels sur Gradle Build Tool

La configuration de compilation existe toujours mais ne doit pas être utilisée car elle n’offrira pas les garanties fournies par l’API et les configurations d’implémentation.

il est préférable d’utiliser l’ implémentation ou api plutôt comstackr

Il suffit de remplacer comstackr avec implémentation , debugComstack avec debugImplementation , testComstack avec testImplementation et androidtestcomstack avec androidTestImplementation

Par exemple: au lieu de cela

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

utiliser comme ça

 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 ça

  • Supprimez le dossier .gradle dans votre projet (Notez que pour voir .gradle, vous devez passer à la vue “Projet” dans le navigateur en haut à gauche)
  • Supprimez tous les dossiers de génération et le cache de dégradé.
  • Dans le menu Générer, appuyez sur le bouton Nettoyer le projet .
  • Une fois la tâche terminée, appuyez sur le bouton Rebuild Project du menu Build.

J’espère que ça aidera!

  1. Supprimez le répertoire .gradle .

  2. Exécutez votre application à nouveau.

Remarques

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

La suppression de .gradle comme suggéré par Suragch ne me suffisait pas. De plus, je devais effectuer un Build > Clean Project .

Notez que, pour voir .gradle , vous devez passer à la vue “Projet” dans le navigateur en haut à gauche:

Passer à la vue du projet

J’ai essayé toutes les autres solutions, mais personne n’a travaillé pour moi. À la fin, je l’ai résolu en utilisant la même version de dépendance en éditant build.gradle . Je pense que ce problème se produit lors de l’ajout d’une bibliothèque dans gradle qui utilise une version de dépendance différente des bibliothèques de support ou de google.

Ajoutez le code suivant à votre fichier de graduation de construction. Ensuite, clean et rebuild projet.

ps: c’était une vieille solution pour moi donc vous devriez utiliser la version mise à jour des bibliothèques suivantes.

 configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion '26.1.0' } } else if (requested.group == "com.google.android.gms") { details.useVersion '11.8.0' } else if (requested.group == "com.google.firebase") { details.useVersion '11.8.0' } } } 

Dans mon cas, le problème était dû à la bibliothèque de la salle:

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

Le changer pour:

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

travaillé.

Salut j’ai le même problème essayé presque tout. Donc, finalement, après six heures de lutte, je me suis résolue à tout déboguer ligne par ligne.

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

Services Google 3.0 Ne prend pas en charge Firebase avec Studio 3.0 avec playServiceVersion: 11.6.0 ou moins.

 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" 

Solution :

J’ai changer les services Google pour

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

Et il prend en charge les services Firebase.

Espérons que quelqu’un économisera son temps.

  1. Activer

    defaultConfig {multiDexEnabled true}

  2. Si l’étape 1 ne fonctionne pas alors

    Aller à la structure du projet et trouver la bibliothèque externe qui utilise une version différente. Double-cliquez dessus et supprimez son fichier jar. Fermez le projet et ouvrez à nouveau android studio reconstruira le projet. Le problème devrait être résolu.

Juste pour append aux solutions ci-dessus:

Assurez-vous de ne pas avoir de dépendances en double pointant vers des versions différentes, à plusieurs endroits (ou même dans le même fichier).

Si cette erreur est apparue après avoir inclus le support de kotlin et qu’aucune des autres solutions ne fonctionne, essayez de changer la dépendance de kotlin du build.gradle du module d’ build.gradle pour:

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

Cela fonctionne pour moi sur Android Studio 3.0 Beta 6. Voir cette réponse pour plus d’explications.

L’une des possibilités est la présence de la même bibliothèque mais avec des versions différentes dans les dépendances .

J’ai eu ce problème avec les lignes suivantes dans le fichier gradle:

  • comstack fileTree(include: ['*.jar'], dir: 'libs')
  • comstack 'com.google.code.gson:gson:2.8.2'

La bibliothèque gson était dans mon répertoire libs mais avec une version précédente. J’ai supprimé le gson-2.3.1.jar du répertoire libs et tout est revenu à la normale.

append des commandes ci-dessous:

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

Avec Android Studio 3.0, la construction stable ci-dessous a fonctionné pour moi:

  1. SdkManager -> Android Sdk -> Outils Sdk et les services de mise à jour de Google à la dernière version à 46.
  2. Projet propre et projet de reconstruction.

Installation des services Google Play (dernière version) + y compris

 android { defaultConfig { multiDexEnabled true } } 

dans build.gradle résolu le problème pour moi, assurez-vous de nettoyer et de reconstruire le projet!

[IMPOSSIBLE DE FUSIONNER DEX RESOLU] Après des heures de débordement de stack, j’ai résolu le message “UNABLE TO MERGE DEX ERROR”

  1. Mettez à jour toutes les lignes com.android.support de votre gradle en v27.1.0

Cause – Android a mis à jour ses bibliothèques de support vers la v27.1.0, vous devez donc remplacer toutes les lignes de support Android de votre fichier de graduation par 27.1.0 à partir de la version 26.1.0.

  1. Assurez-vous que la section référentiels contient une section Maven avec le noeud final ” https://maven.google.com “. Par exemple:

    allprojects {repositorys {jcenter () maven {url ” https://maven.google.com “}}}

Cause: – Android ne peut pas mettre à jour les bibliothèques de support dans le gestionnaire de SDK et maintenant, il utilise maven.google.com pour la mise à jour. Vous devez donc l’inclure pour utiliser les bibliothèques de support 27.1.0

Après la version de modification: 1. Projet propre 2. Projet de reconstruction

si (1. Essayez de nettoyer et de reconstruire le travail) alors bon

sinon si (2. Essayez de supprimer le travail de graduation) alors bon

else-> 3. Essayez d’append dans grade.properties

 android.enableD8 = false 

else-> 4. Ajoutez multiDexEnabled à votre build.gradle

 android { comstackSdkVersion 26 defaultConfig { ... minSdkVersion 15 targetSdkVersion 26 multiDexEnabled true ... } } 

et append la dépendance

 dependencies { comstack 'com.android.support:multidex:1.0.1'} 

Il se peut que le premier fonctionne pour vous et ainsi de suite, mais cela dépend vraiment de la nature de votre problème, par exemple pour moi.

J’ai eu l’erreur une fois que j’ai ajouté cette bibliothèque

 implementation 'com.jjoe64:graphview:4.2.2' 

et plus tard, j’ai découvert que je devais vérifier cela et que je devais append la même version des bibliothèques de support. Je dois donc essayer une autre version

 comstack 'com.jjoe64:graphview:4.2.1' 

et il corrige le problème. Alors faites attention à cela.

Je suis d’accord avec Chris-Jr. Si vous utilisez Firebase pour intégrer vos annonces AdMob (ou même si vous ne l’êtes pas), play-services-analytics inclut les annonces play-services, même si vous ne les ajoutez pas comme dépendance. Google a manifestement commis une erreur lors de son déploiement en 11.4.0, car l’parsing inclut la version 10.0.1 des annonces, et non la version 11.4.0 (le survol de la souris le montre).

J’ai ajouté manuellement comstack ‘com.google.android.gms: play-services-ads: 11.4.0’ en haut qui fonctionnait, mais seulement après que j’aie désactivé Instant Run: http://stackoverflow.com/a/35169716/530047

Donc, c’est soit régresser à 10.0.1 ou append les annonces et désactiver Instant Run. C’est ce que j’ai trouvé si cela peut aider.

J’ai rencontré le même problème et trouvé la vraie raison de mon cas. Auparavant, j’ai également essayé toutes les réponses précédentes, mais cela n’a pas résolu le problème. J’ai deux modules dans mon projet d’application Wear et le build.gradle comme suit:

porter le build.gradle du module:

 implementation project(':common') implementation files('libs/farmer-motion-1.0.jar') 

build.gradle du module commun:

 implementation files('libs/farmer-motion-1.0.jar') 

Avant la mise à niveau vers la version 3.x, «implémentation» sont toutes «compilées».

J’exécute gradlew avec l’option –stacktrace pour obtenir la trace de la stack, vous pouvez simplement cliquer sur cette fenêtre de la console lorsque ce problème survient. Et a constaté que la dépendance au paquet jar a répété:

 Caused by: com.android.dex.DexException: Multiple dex files define Lcom/farmer/motion/common/data/pojo/SportSummary$2; 

Classe SportSummary dans le package farmer-motion-1.0.jar, après avoir lu le guide de migration officiel , j’ai modifié mon build.gradle comme suit:

porter le build.gradle du module:

 implementation project(':common') // delete dependency implementation files('libs/farmer-motion-1.0.jar') 

module commun 的 build.gradle:

 api files('libs/farmer-motion-1.0.jar') // change implementation to api 

Maintenant, portez le module aura la dépendance de l’exportation farmer-motion-1.0.jar par module commun. S’il n’y a pas de dépendance sur le package jar lors de l’exécution , la dépendance « implémentation » du package jar peut également être modifiée en «comstackOnly» .

J’ai aussi eu le problème.

J’ai pu résoudre en modifiant comstackSdkVersion et targetSdkVersion en dernière version.

Pour notre projet, nous avons accidentellement ajouté le même pot deux fois avec un nom différent. Enlever l’un d’eux a résolu le problème.

Pour moi, il s’agissait de mettre à jour la messagerie firebase dans app \ build.gradle:

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

à

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

L’une des causes possibles: les dépendances transitoires dupliquées qui n’étaient pas correctement gérées par l’importation de projets multi-modules dans Android Studio. Vérifiez votre liste et supprimez-les. Pour moi, le correctif était littéralement ceci:

 --- 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') } 

Dans mon cas, c’était gson-2.8.1.jar que j’ai ajouté au dossier libs du projet. Mais la référence était déjà là par SDK. Il n’était donc pas nécessaire d’ append gson-2.8.1.jar au dossier libs.

Quand je l’ai sorti, le projet gson-2.8.1.jar se comstack sans cette erreur.

Donc, essayez de réviser le dossier et les dépendances de libs .

Je trouve la raison de ce problème pour mon projet. On m’a ajouté une dépendance à deux resockets dans build.gradle . Une fois en ajoutant une dépendance et une fois en ajoutant une dépendance jar:

comstackr ‘org.achartengine: achartengine: 1.2.0’

fichiers d’implémentation (‘../ achartengine-1.2.0.jar’)

après supprimer le problème de première ligne résolu.

Si les meilleures réponses n’ont pas fonctionné pour vous, il se peut que vous ayez plusieurs dépendances qui dépendent de la même bibliothèque.

Voici quelques conseils de débogage. Dans cet exemple de code, com.google.code.findbugs:jsr305:3.0.0 est la bibliothèque incriminée.

Toujours nettoyer et reconstruire chaque fois que vous modifiez pour vérifier votre solution!

  1. Construisez avec l’indicateur --stacktrace pour plus de détails. Il va se plaindre d’une classe, Google cette classe pour trouver la bibliothèque. Voici comment vous pouvez configurer le studio Android pour toujours exécuter gradle avec le drapeau --stacktrace .

  2. Jetez un coup d’œil à la Gradle Console dans Android Studio View > Tool Windows > Gradle Console après une compilation

  3. ./gradlew -q app:dependencies dépendances répétées en exécutant ./gradlew -q app:dependencies . Vous pouvez réexécuter ceci chaque fois que vous modifiez votre build.gradle.

  4. Dans build.gradle,

     android { ... configurations.all { resolutionStrategy { // Force a particular version of the library // across all dependencies that have that dependency force 'com.google.code.findbugs:jsr305:3.0.0' } } } 
  5. Dans build.gradle,

     dependencies { ... implementation('com.google.auth:google-auth-library-oauth2-http:0.6.0') { // Exclude the library for this particular import exclude group: 'com.google.code.findbugs' } } 
  6. Dans build.gradle,

     android { ... configurations.all { resolutionStrategy { // Completely exclude the library. Works for transitive // dependencies. exclude group: 'com.google.code.findbugs' } } } 
  7. Si certaines de vos dépendances se trouvent dans des fichiers jar, ouvrez les fichiers jar et vérifiez s’il existe des noms de classe en conflit. Si tel est le cas, vous devrez probablement reconstruire les jars avec de nouveaux noms de classes ou regarder dans les ombres .

Quelques lectures d’arrière-plan:

  • Android – Comprendre et dominer les dépendances graduelles
  • Documentation Gradle: Gestion des dépendances pour les projets Java
  • Documentation Gradle: ResolutionStrategy
  • StackOverflow: Erreur: conflit avec la dépendance ‘com.google.code.findbugs: jsr305’
  • StackOverflow: Comment exclure toutes les instances d’une dépendance transitive lors de l’utilisation de Gradle?
  • Google recherche StackOverflow pour toutes les questions connexes
 android { defaultConfig { ... minSdkVersion 15 targetSdkVersion 26 multiDexEnabled true } ... } dependencies { comstack 'com.android.support:multidex:1.0.1' } 

Malheureusement, ni les solutions de Michel ni de Suragch n’ont fonctionné pour moi.

Ce que j’ai finalement dû faire était simplement de com.google.firebase:firebase-database ma com.google.firebase:firebase-database de com.google.firebase:firebase-database version vers la version 10.0.1, car 11.4.0 provoquait un avertissement d’incohérence de dépendance dans mon fichier de classement d’application.

Dans mon cas, j’importe une bibliothèque ‘android_support’ deux fois, alors j’en supprime une dans le répertoire ‘libs’ et la recrée.