web-dev-qa-db-fra.com

Impossible de fusionner Dex - Android Studio 3.0

Lorsque j'ai mis à jour mon Android Studio vers la version 3.0 dans le canal stable et que j'ai exécuté le projet, j'ai commencé à obtenir l'erreur ci-dessous.

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
com.Android.builder.dexing.DexArchiveMergerException: Unable to merge dex

J'ai essayé de nettoyer et de reconstruire le projet, mais cela n'a pas fonctionné. Toute aide serait appréciée.

Niveau de projet build.gradle

buildscript {
repositories {
    jcenter()
    google()
}
dependencies {
    classpath 'com.Android.tools.build:gradle:3.0.0'
    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
}

Niveau de l'appli build.gradle

apply plugin: 'com.Android.application'
Android {
compileSdkVersion 26
buildToolsVersion '26.0.2'
defaultConfig {
    applicationId "com.med.app"
    minSdkVersion 21
    targetSdkVersion 26
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
    resConfigs "auto"
    multiDexEnabled true

}
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.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'

//appcompat libraries
compile 'com.Android.support:appcompat-v7:26.1.0'
compile 'com.Android.support:design:26.1.0'


//butterknife
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

//picasso
compile 'com.squareup.picasso:picasso:2.5.2'

//material edittext
compile 'com.rengwuxian.materialedittext:library:2.1.4'

// Retrofit & OkHttp & and OkHttpInterceptor & gson
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.squareup.okhttp3:logging-interceptor:3.8.0'

// FirebaseUI for Firebase Auth
compile 'com.firebaseui:firebase-ui-auth:3.1.0'
}
apply plugin: 'com.google.gms.google-services'

J'ai essayé toutes les réponses données mais je suis incapable de résoudre cette erreur. S'il vous plaît aider.

42
user8583580

Ajoutez une dépendance explicite à play-services-auth avec votre dépendance firebase-ui-auth:

// FirebaseUI for Firebase Auth
    compile 'com.firebaseui:firebase-ui-auth:3.1.0'
    compile 'com.google.Android.gms:play-services-auth:11.4.2'

En effet, firebase-ui-auth a une dépendance transitive à play-services-auth et doit être utilisé avec la version correspondante de play-services-auth. S'il vous plaît voir cette explication .

firebase-ui-auth
|--- com.google.firebase:firebase-auth
|--- com.google.Android.gms:play-services-auth

Les versions antérieures de l'outil de génération Gradle n'incluaient pas de dépendances transitives, de sorte que les versions peuvent maintenant entrer en conflit avec d'autres versions play-services.

Mon problème expliqué et répondu (Au cas où quelqu'un voudrait savoir)

Lorsque vous effectuez une mise à niveau vers Android Studio 3.0 et mettez à jour la version de l'outil de génération de dégradés vers la version 3.0.0, la compilation des dépendances est désormais effectuée différemment des versions précédentes.

J'ai récemment rencontré le même problème. J'utilisais ces dépendances qui fonctionnaient bien avec Gradle version 2.3.3:

implementation 'org.Apache.httpcomponents:httpmime:4.3.6'
implementation 'org.Apache.httpcomponents:httpclient-Android:4.3.5.1'

Après la mise à niveau vers gradle-build-version 3.0.0, j'ai eu la même erreur. Digint dedans, j'ai trouvé que la dépendance transitive de httpmime était en conflit avec le fichier httpclient-Android était inclus.

Description

Laissez-moi vous expliquer cela en détail. Auparavant, lorsque j'utilisais gradle-tool-version 2.3.3, j’utilisais httpclient-Android pour récupérer et utiliser la classe nommée org.Apache.http.entity.ContentType.Java L’expansion des dépendances transitives de org.Apache.httpcomponents:httpmime:4.3.6 montrait qu’elle avait org.Apache.httpcomponents:httpcore:4.3.6 qui est le même paquet que je voulais utiliser. Mais lors de la compilation ou de la synchronisation de la construction, il excluait org.Apache.http.entity.ContentType.Java et j’avais donc besoin d’ajouter cette dépendance qui inclut ContentType.Java:

implementation 'org.Apache.httpcomponents:httpclient-Android:4.3.5.1'

Tout a bien fonctionné après ça.

Une fois que j'ai mis à niveau la version gradle-build-version vers la version 3.0.0, les choses ont changé. Il incluait maintenant toutes les dépendances transitives. Ainsi, lors de la compilation avec le dernier Android Studio avec la version 3.0.0 de Gradil-Build-Tool, mon ContentType.Java était en cours de compilation deux fois. Une fois de org.Apache.httpcomponents:httpcore:4.3.6 (qui est une dépendance transitive implicite de httpmime) et encore de org.Apache.httpcomponents:httpclient-Android:4.3.5.1 que j’utilisais auparavant.

Pour résoudre ce problème, je devais supprimer la dépendance existante org.Apache.httpcomponents:httpclient-Android:4.3.5.1, car httpmime irait lui-même chercher la classe appropriée requise pour mon application.

La solution à ma situation: n'utilisez que les dépendances requises et supprimez le httpclient-Android

implementation 'org.Apache.httpcomponents:httpmime:4.3.6'

Notez que c'est juste le cas pour moi. Vous devrez creuser vos propres dépendances et appliquer la solution en conséquence.

30
Bhavesh Patadiya

Tout d'abord, j'ai activé multidex comme suggéré dans les commentaires précédents.

Ensuite, si l'erreur persiste, ouvrez la console Gradle (cliquez sur l'icône "Afficher la sortie de la console" à gauche de la section "Messages"), puis sur le lien pour recompiler avec les options Debug/Info/Stack. Cela montrera plus de détails sur l'erreur.

Dans mon cas, l'erreur "Impossible de fusionner dex" était due à des entrées en double dans "com.jakewharton.picasso: picasso2-okhttp3-downloader: 1.1.0".

J'ai manuellement supprimé la bibliothèque en conflit de mon projet et exécuté le "Rebuild Project" (forçant à recharger la bibliothèque). Cela a résolu le problème.

14
Pablo Alfonso

J'ai eu cette erreur:

com.Android.builder.dexing.DexArchiveMergerException: impossible de fusionner dex

et a fini par changer mon grade afin de résoudre ce problème.

app\build.gradle

Android {
compileSdkVersion 25
//buildToolsVersion '26.0.2'
buildToolsVersion '25.0.3'//<< Changed back to old version before my studio 3.0 update
defaultConfig { ....

.\build.gradle

buildscript {
repositories {
    jcenter()
    google()
}
dependencies {
    classpath 'com.Android.tools.build:gradle:2.3.3' //<< Changed back to old version before my studio 3.0 update
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

Ce n'est pas idéal car c'est un retour en arrière, mais c'est quelque chose qui a fonctionné pour moi et devrait m'y amener jusqu'à ce qu'un correctif soit publié.

3
Alex Hermon

Vérifiez les dépendances dans votre build.gradle (app) si vous utilisez 2 (ou plus) bibliothèques avec le même nom et une version différente. Par exemple (dans mon cas):

implementation files('src/main/libs/support-v4-24.1.1.jar')
implementation 'com.Android.support:support-v4:27.0.2'

Retirez-en un, nettoyez-le et reconstruisez-le. Notez également que dépendances est en dehors de buildscript.

3
JeffNhan
Android {
    defaultConfig {
       multiDexEnabled true
    }
}

ajoute cette ligne au fichier :gradle

2
Vaibhav pandey

Parfois, cette erreur se produit lorsque le même fichier de bibliothèque .jar est présent dans le dossier "libs" et que nous essayons en même temps d'obtenir le code source en ajoutant la ligne "compile" dans le fichier de fichier d'application.

N'importe lequel de ces cas, si nous supprimons, nous pouvons surmonter cette erreur.

J'espère que cela peut être utile.

1
suhasini

j'ai le même problème je l'ai résolu mis:

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

dans buildscript-> dépendances

build.gradle

dans mon dossier j'ai:

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:3.0.0'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}
1
GeoPamplona

Il suffit de changer votre chemin de classe pour:

chemin de classe 'com.Android.tools.build:gradle:2.3.3'

et servez votre diplôme.

J'espère que cela aidera.

1
Gaurav

"toutes les bibliothèques gsm" Merci, cela a aidé à résoudre mon problème, mais pas seulement les bibliothèques gsm, mais toutes les bibliothèques google doivent avoir la même version. J'ai eu cette erreur dexing, parce que le com.Android.support:recyclerview-v7 avait une version différente de la com.Android.support:appcompat-v7

Le studio Android affiche ces lignes avec un soulignement rouge dans le fichier build.gradle.

1
user2466053

J'ai fait exactement comme l'indice dans la capture d'écran ci-dessous, changé 11.0.4 à 11.8.0

compile 'com.google.Android.gms:play-services-base:11.8.0'
compile 'com.google.Android.gms:play-services:11.8.0'

ça fonctionne bien

Unable to merge dex

0
mohammed alshaarawi

À la place, je rencontrais la même erreur avec la base de données d'interface utilisateur Firebase. Même après l'activation de multiDex comme suggéré dans les autres réponses, j'entendais toujours l'erreur. J'ai ensuite appris qu'il était nécessaire que l'interface utilisateur de Firebase et la base de données Firebase aient les mêmes versions que celles indiquées dans le référentiel Firebase UI de GitHub.

Firebase UI GitHub

0
Rohan Lekhwani

On dirait que cette erreur a plusieurs scénarios. Dans mon cas, il y avait une 1.8 Java compiler dans build.gradle (app):

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

J'ai enlevé et l'erreur a disparu

0
Felipe Costa

Pour ceux qui luttent encore avec cela plus récemment et qui ont ajouté des composants. Ce qui m'a causé cela a été d'ajouter:

compile 'Android.Arch.lifecycle: extensions: 1.0.0' annotationProcessor 'Android.Arch.lifecycle: compilateur: 1.0.0'

Qu'est-ce que ça a résolu de le mettre à jour pour

compile 'Android.Arch.lifecycle: extensions: 1.1.1' annotationProcessor 'Android.Arch.lifecycle: compilateur: 1.1.1'

J'espère que ça t'as aidé.

0
SlickDev

J'ai changé le ci-dessous de 11.6.0 à 11.8.0 et cela a fonctionné.

compile 'com.google.Android.gms:play-services-ads:11.6.0'

implementation 'com.google.Android.gms:play-services-ads:11.8.0'
0

Ce lien a résolu le problème pour moi.

Je mets d’abord les dépendances dans mon fichier pubspec.yaml sur

dependencies:
  flutter:
    sdk: flutter
  cloud_firestore: ^0.8.2 

et a lancé flutter packages get dans le terminal de mon IDE.

De plus, je devais changer la version minimale du SDK cible:

  1. Ouvrez Android/app/build.gradle, puis recherchez la ligne indiquant minSdkVersion 16.
  2. Modifiez cette ligne en minSdkVersion 21.
  3. Enregistrez le fichier.

De plus, je devais ouvrir Android/app/build.gradle, puis ajouter la ligne suivante comme dernière ligne du fichier: apply plugin: 'com.google.gms.google-services'

Ensuite, j'ai dû ouvrir Android/build.gradle, puis à l'intérieur de la balise buildscript, ajouter une nouvelle dépendance:

buildscript {
   repositories {
       // ...
   }

   dependencies {
       // ...
       classpath 'com.google.gms:google-services:3.2.1'   // new
   }
}

Après cela, mon application a finalement été exécutée sur l'émulateur Android.

Le lien a une procédure plus complète si vous êtes bloqué.

0
Casey Schneider

Dans mon cas, je devais faire trois choses:

  1. Comme j'utilisais Firebase, assurez-vous que Firebase et Google Play Services avaient la même version. Initialement, Play Services avait une version inférieure. Surtout la version 12.0.1 aidée

  2. Définir ce niveau de build.gradle de l'application

    Android {  
        multiDexEnabled true   
    }
    
  3. Encore une fois dans le niveau de build.gradle de l'application, ajoutez

    compileOptions{
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
    
0
Javac Ds

je pense que c'est parce que la bibliothèque diffère dépend de la même bibliothèque enfant mais que la version est différente, excluez donc la dépendance d'une bibliothèque comme:

api (rootProject.ext.dependencies["bindingRecyclerView"]) {
    exclude group: 'com.Android.support'
}
0
like

Ajoutez ceci: votre implémentation 'com.Android.support:multidex:1.0.0'

Nettoyer le projet et ensuite reconstruire.

0
ArunKumar

Cela pourrait aussi être trop tard, mais je pense avoir aussi une réponse. Sur la base de mes essais récents, lors de la compilation de l'application, assurez-vous de ne pas avoir de fichier jar et une'implementation'('compile' for 3.0.1 > gradle) du même package dans le même projet. Dans mon cas, j’avais implementation 'org.jsoup:jsoup:1.11.2' et Jsoup jar dans le même projet. Erreur de recrue mais, j'ai appris.

0
Granson

En ajoutant ce code suivant dans build.gradle (module d'application), travaillez pour moi

Android {
      defaultConfig {
          multiDexEnabled true
      }
}

dependencies {
    androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.1'
    implementation 'com.Android.support:support-v4:26.1.0'
}
0
Yash Jain