Impossible de fusionner dex

307

J'ai Android Studio Beta. J'ai créé un nouveau projet avec compiler mes anciens modules mais quand 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 googlé cela 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 gradle d'application:

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

____________découverte_________

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

Parad0X
la source
6
Si quelqu'un rencontre le même problème dans la version stable d'Android Studio 3.0, je vous recommande fortement de consulter la réponse stackoverflow.com/questions/46949761/… et de voir si cela peut vous aider.
Bhavesh Patadiya,
1
J'ai eu le même problème et j'ai suivi toutes les méthodes mentionnées sur cette page mais ne m'a pas aidé alors je vais dans le gradle et je maintiens le curseur sur chaque bibliothèque pour vérifier que leur nouvelle version est disponible ou non. ceux qui ont une nouvelle version, j'ai donc mis à jour, synchronisé gradle et exécuté. ça a marché.
Shahzad Afridi

Réponses:

293

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

  1. nettoyer
  2. reconstruire
Zohidjon Akbarov
la source
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
itzhar
2
Cela résout mon problème, où multiDexEnabled trueseul ne l'a pas fait
Yuri Brigance
28
même isse avec com.google.android.gms: play-services-location: 11.6.0 ... ce n'est pas une solution valide
issamux
3
Cette solution a fonctionné pour moi lorsque j'ai eu un problème de compatibilité avec les bibliothèques Google Analytics. Dans la vue AS, le volet du navigateur de projet Android est "Projet", vous devriez voir "Bibliothèques externes", si vous développez les bibliothèques externes, vous verrez tous les pots et modules utilisés pour compiler le projet. Il devrait vous aider à identifier les combinaisons de modules incompatibles.
angryITguy
3
Si le code ci-dessus ne fonctionne pas en cas de "compileSdkVersion 26", essayez ceci. Allez sur - build.gradle (Module: app) - ajoutez "multiDexEnabled true" dans la catégorie defaultConfig et dernière étape Allez dans Fichier | Paramètres | Construction, exécution, déploiement | Exécuter instantanément et essayer d'activer / désactiver
Sumit Saxena
325

J'ai essayé tout ce qui précède et aucun d'eux n'aide. enfin, je trouve ce travail pour moi:

app / build.gradle:

android {
    defaultConfig {
       multiDexEnabled true
    }
}
itzhar
la source
11
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 que vous ne pouvez pas reconstruire. multiDex semble autoriser la combinaison du code autrement incompatible.
Brendon Whateley du
2
Cette solution a fonctionné pour moi, mais en plus, j'ai dû activer explicitement le multidex pour l'API <= 21 developer.android.com/studio/build/multidex.html
hamou92
2
Bien qu'étant plus pertinent que la réponse acceptée, je reçois toujours le message "Impossible de fusionner dex"
John
13
Ça n'a pas marché pour moi. Avec ce changement, j'ai eu une erreur différente: Échec de l'exécution pour la tâche ': app: transformClassesWithMultidexlistForDebug
Atul
1
Oui pendant 5 heures, je vivais avec des réponses totalement différentes. Mais d'une manière ou d'une autre, j'ai réalisé que c'était un problème Multidex et j'ai atterri ici. J'étais vrai. Merci l'homme
sud007
59

Faites attention aux avertissements!

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


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

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

et Studio avait averti ( en plus du problème de fusion dex ):

Toutes les com.android.supportbibliothèques doivent utiliser exactement la même spécification de version (le mélange des versions peut entraîner des plantages d'exécution). Trouvé versions 27.0.2, 21.0.3. Les exemples incluent com.android.support:animated-vector-drawable:27.0.2etcom.android.support:support-v4:21.0.3

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

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.

Mir-Ismaili
la source
1
Merci, cela a résolu le problème pour moi. Cela a été initialement causé par l'ajout de eu.inloop: androidviewmodel: 1.3.4
lsrom
1
Exactement, je souhaite juste que l'erreur aurait pu être plus précise
Amin Keshavarzian
1
Merci beaucoup. J'ai eu le même problème. J'utilisais la v26, mise à jour vers SDK 27 et j'ai résolu le problème.
Johnny
2
Ce devrait être la bonne réponse. Mes versions ont cessé de fonctionner après avoir ajouté une bibliothèque (airbnb / epoxy) qui avait une dépendance support:design:26.1.0, et je n'avais pas encore cette dépendance. Mes autres bibliothèques de support sont la version 27.1.0. Après avoir ajouté une support:designdépendance avec la 27.1.0version, mon problème a été résolu.
alashow
2
Je vous remercie. Vous sauvez ma journée.
Nithinjith
37

Dans mon cas, malheureusement, ni les solutions de Michel ni celles 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 désormais obsolète et devrait être remplacée par l' implémentation ou l' 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 qu'apportent les configurations d'api et d'implémentation.

il vaut mieux utiliser l' implémentation ou l' api plutôt compiler

remplacez simplement compile par implémentation , debugCompile par debugImplementation , testCompile par testImplementation et androidtestcompile par androidTestImplementation

Par exemple: au lieu de cela

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 ç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 à l'intérieur de votre projet (Notez que, pour voir .gradle, vous devez basculer vers la vue "Projet" dans le navigateur en haut à gauche)
  • Supprimez tous les dossiers de construction et le cache Gradle.
  • Dans le menu Build, appuyez sur le bouton Clean Project .
  • Une fois la tâche terminée, appuyez sur le bouton Reconstruire le projet dans le menu Générer.

J'espère que cela vous aidera!

Roi des masses
la source
2
Merci, tout ce que j'avais à faire était de changer la compilation en implémentation et elle a réussi, sans avoir à terminer les autres étapes. La construction a commencé à échouer après avoir mis à jour le SDK Facebook
Shayno
2
A fonctionné pour moi - un aperçu de pourquoi?
Alex
1
Le dossier à supprimer devrait être .gradleet non./gradle
Gary Bak
1
La seule réponse qui a réellement fonctionné pour moi. Merci!
Michael Richardson
1
Merci, c'est la réponse la plus cool. Il devrait être au sommet de la recherche. A travaillé pour moi.
Danger
27
  1. Supprimez le .gradlerépertoire.

  2. Exécutez à nouveau votre application.

Remarques

  • Le .gradlerépertoire 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 à l'aide d'Android 3.0. (Les versions plus récentes d'Android Studio 3 semblent avoir résolu le problème.)
Suragch
la source
4
cela m'a aidé quand j'ai aussi fait un cache invalidé et redémarré
Vasili Fedotov
J'étais incrédule lorsque 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-unes des versions suspectes d'ilb .. quand j'ai finalement fait cela, cela a fonctionné ..
hanzolo
Tu m'as sauvé la vie! Merci
Masterfego
24

Supprimer .gradlecomme suggéré par Suragch ne me suffisait pas. De plus, j'ai dû effectuer un Build > Clean Project.

Notez que pour voir .gradle, vous devez basculer vers la vue "Projet" dans le navigateur en haut à gauche:

Passer à la vue du projet

Michel Jung
la source
23

J'ai essayé toutes les autres solutions, mais personne ne travaillait 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 du support ou des bibliothèques Google.

Ajoutez le code suivant à votre fichier gradle de génération. Ensuite cleanet rebuildprojetez.

ps: c'était une ancienne solution pour moi, vous devez donc 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'
          }
      }
}
Ali Gürelli
la source
5
essayé toutes les autres solutions, à la fin seulement cela a aidé: /
Ante
@Ali Gurelli Merci beaucoup J'ai essayé de nombreuses solutions mais seulement ce travail.
Bipin Bharti
Merci mais pour moi j'utilise la version details.useVersion '15 .0.0 '
Elsunhoty
Merci pour la solution. Le même problème m'est arrivé. google tap and pay était 10.0.0 et reste toutes les bibliothèques sont sur la dernière version
R World
Fonctionné en douceur Merci
Sankalp
14

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

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

else-> 3. Essayez d'ajouter dans grade.properties

android.enableD8 = false

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

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

et ajoutez la dépendance

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

Cela peut être le premier qui fonctionne pour vous et ainsi de suite, mais cela dépend vraiment de la nature de votre problème pour moi par exemple

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 dois vérifier cela et je dois ajouter la même version des bibliothèques de support. Je dois donc essayer une autre version

compile 'com.jjoe64:graphview:4.2.1'

et cela résout le problème. Faites donc attention à cela.

DINA TAKLIT
la source
3
Le moyen le plus utile pour ce problème. L'une que je veux mentionner ici est que, vous pouvez utiliser l'appli gradlew: transformDexArchiveWithExternalLibsDexMergerForDebug --stacktrace 'cmd pour plus de détails. Je me sauve, a constaté que je dois activer le multidex. J'espère utile.
panda
13

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

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

Le changer en:

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

travaillé.

Shashi
la source
Merci beaucoup, cela m'a beaucoup aidé!
Phil
Je suis tellement content de trouver cette réponse. Merci!
callOfCode
12

Juste pour ajouter aux solutions ci-dessus:

Assurez-vous que vous n'avez pas de dépendances en double pointant vers différentes versions d'entre elles, à plusieurs endroits (ou même dans le même fichier).

développeur android
la source
Je pense que cela devrait être d'abord vérifié avant d'ajouter multiDexEnabled true et d'essayer d'autres réponses. Merci!
Aleksandr A
11

Salut, j'ai le même problème essayé presque tout. Donc, finalement, j'ai résolu après 6 heures de lutte en déboguant tout ligne par ligne.

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

Google-services 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 changé les services google en

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

Et il prend en charge les services Firebase.

J'espère que quelqu'un économisera son temps.

Saveen
la source
1
J'ai le même problème que j'utilisais playServiceVersion avec l'implémentation 11.4.0 "com.google.firebase: firebase-core: 11.4.0" le changer en implémentation "com.google.firebase: firebase-core: 11.6.2" a corrigé mon problème . Veuillez donc vérifier la dépendance de version pour différentes lib
durgeshtrivedi
9
  1. Activer

    defaultConfig {multiDexEnabled true}

  2. Si l'étape 1 ne fonctionne pas, alors

    Accédez à la structure du projet et découvrez la bibliothèque externe qui utilise une version différente. Double-cliquez dessus et supprimez son fichier jar. Fermez le projet et ouvrez à nouveau le studio Android reconstruira le projet. Le problème devrait avoir disparu.

Abhisek Mallick
la source
+1 - J'avais le support lib, rxjava et une dépendance tierce (13k lignes). Mes yeux ont presque éclaté quand j'ai vu le compte de la méthode.
snodnipper
6

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:

  • compile fileTree(include: ['*.jar'], dir: 'libs')
  • compile '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.jardu répertoire libs et tout est revenu à la normale.

Philippe Grain
la source
suppression compile fileTree(include: ['*.jar'], dir: 'libs')corrigée pour moi aussi .. merci (y)
Dinuka Salwathura
5

Si cette erreur est apparue pour vous après avoir inclus la prise en charge de kotlin et qu'aucune des autres solutions ne fonctionne, essayez de changer la dépendance kotlin des modules d'application build.gradleen:

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.

aksh1618
la source
Oui, il semble que l'introduction de Kotlin pourrait casser la construction si les annotations ne sont pas exclues.
Stoycho Andreev
Merci. C'était la solution pour moi. J'ai du mal 3 jours à identifier mon problème.
Naveen Kumar M
Essayez plutôt de passer à la version 1.2.30 du plugin Kotlin (qui vient d'être publié). Désormais, Instant Run peut également être réactivé!
KTCO
5

Avec la version stable d'Android Studio 3.0 Les étapes ci-dessous ont fonctionné pour moi:

  1. Accédez à SdkManager -> Android Sdk -> Sdk Tools et mettez à jour les services Google Play vers la dernière version en 46.
  2. Projet propre et projet de reconstruction.
Pulkeet Katiyar
la source
5

[IMPOSSIBLE DE FUSIONNER DEX RÉSOLU] Après des heures de débordement de pile, j'ai résolu «L'ERREUR IMPOSSIBLE DE FUSIONNER DEX»

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

Cause - Android a mis à jour ses bibliothèques de prise en charge en v27.1.0, vous devez donc changer toutes les lignes de support Android de votre fichier gradle de 27.1.0 à 26.1.0

  1. Assurez-vous que la section des référentiels comprend une section maven avec le point de terminaison " https://maven.google.com ". Par exemple:

    allprojects {référentiels {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 le changement de version: 1. Nettoyer le projet 2. Reconstruire le projet

Taha Ali
la source
4

ajoutez des commandes ci-dessous:

android {
...

    dexOptions {

        jumboMode true
        javaMaxHeapSize "4g"

    }
}
zyc zyc
la source
4

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

android {
    defaultConfig {
        multiDexEnabled true
        }
}

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

Harmandeep Gill
la source
3

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' ajouter gson-2.8.1.jar au dossier libs.

Quand je l' ai retiré, le projet gson-2.8.1.jar se compile sans cette erreur bizarre.

Essayez donc de réviser le dossier libs et les dépendances .

Développeur
la source
3

Je suis d'accord avec Chris-Jr. Si vous utilisez Firebase pour incorporer vos annonces AdMob (ou même si vous ne l'êtes pas), les play-services-analytics incluent les play-services-ads même si vous n'ajoutez pas cela en tant que dépendance. Google a évidemment fait une erreur dans son déploiement 11.4.0, car l'analyse inclut la version 10.0.1 des publicités, pas 11.4.0 (l'indication de la souris dans le gradle le montre).

J'ai ajouté manuellement la compilation «com.google.android.gms: play-services-ads: 11.4.0» en haut, ce qui a fonctionné, mais seulement après avoir désactivé Instant Run: http://stackoverflow.com/a/35169716/530047

Il est donc préférable de régresser vers 10.0.1 ou d'ajouter les annonces et de désactiver Instant Run. C'est ce que j'ai trouvé si ça aide.

Jonathan
la source
OP a-t-il mentionné les services de jeu?
IgorGanapolsky
La réponse approuvée l'a fait. Si ce problème refait surface sans ce scénario, je ne sais pas!
Jonathan
2

J'ai rencontré le même problème et trouvé la vraie raison de mon cas. Auparavant, j'ai également essayé à nouveau 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 d'usure et le build.gradle comme suit:

wear.gradle du module wear:

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 gradle 3.x, la «mise en œuvre» consiste à «compiler».

J'exécute gradlew avec l'option --stacktrace pour obtenir la trace de la pile, vous pouvez simplement cliquer dessus dans la fenêtre de la console gradle lorsque ce problème se pose. Et constaté que la dépendance au package jar se répétait:

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 changé mon build.gradle comme suit:

wear.gradle du module wear:

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, le module d'usure 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 pendant l'exécution , la dépendance «d' implémentation » du package jar peut également être remplacée par «compileOnly» .

FarmerLi
la source
2

J'ai aussi eu le problème.

J'ai pu résoudre en changeant compileSdkVersionet targetSdkVersionen dernière version.

akhil as
la source
2

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

Ifta
la source
Cela a résolu mon problème. Je construisais un projet de bibliothèque Android interne et sous son libsdossier, j'avais deux fichiers jar, dont l'un est juste une sauvegarde de l'autre mais avec un nom de fichier différent.
hopia
2

Ce n'est peut-être pas votre problème, mais j'ai eu cette erreur lorsque j'ai accidentellement inclus deux bibliothèques identiques (mais différemment nommées) dans la section des dépendances {} du projet.

DontPanic
la source
1

Pour moi, il mettait à jour la messagerie Firebase dans app \ build.gradle:

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

à

compile 'com.google.firebase:firebase-messaging:11.4.2'
milamber
la source
1

L'une des causes profondes possibles: les dépendances transitoires en double qui n'ont pas été correctement gérées par l'importation Android Studio de projets multi-modules. Vérifiez votre liste et supprimez-les. Pour moi, la solution était littéralement la suivante:

--- 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')
 }
Vermont.
la source
1

Je découvre la raison de ce problème pour mon projet. J'ai été ajouté une dépendance deux fois dans build.gradle . Une fois en ajoutant une dépendance et une autre fois en ajoutant une dépendance jar:

compiler 'org.achartengine: achartengine: 1.2.0'
...
fichiers d'implémentation ('../ achartengine-1.2.0.jar')

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

Mansour
la source
1

Dans le cas où les meilleures réponses n'ont pas fonctionné pour vous, votre problème peut être que vous avez plusieurs dépendances qui dépendent de la même bibliothèque.

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

Nettoyez et reconstruisez toujours à chaque modification pour vérifier votre solution!

  1. Construisez avec le --stacktracedrapeau dessus 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 Android studio pour toujours exécuter gradle avec le --stacktracedrapeau .

  2. Jetez un coup d'œil à la console Gradle dans Android Studio View > Tool Windows > Gradle Consoleaprès une construction

  3. Vérifiez les dépendances répétées en exécutant ./gradlew -q app:dependencies. Vous pouvez réexécuter cela 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 sont dans des fichiers jar, ouvrez les fichiers jar et voyez s'il y a des noms de classe en conflit. S'ils le sont, vous devrez probablement reconstruire les pots avec de nouveaux noms de classe ou examiner l' ombrage .

Un peu plus de lecture de fond:

J Wang
la source
1
android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.1'
}
Eben Watts
la source
2
Pourriez-vous élaborer?
sg7
J'ai également eu le même problème mais j'ai réalisé que résoudre mon problème à ce moment-là, mais dans les futures mises à jour, les choses pourraient en fait changer.
Eben Watts
1

Dans mon cas, une bibliothèque pose ce problème, la bibliothèque a été ajoutée avec succès au projet, mais lorsque j'exécute mon application, elle me montre cette erreur. Donc, si cela vous arrive aussi, vous pouvez aller sur github et vérifier les problèmes ou soulever un nouveau problème. Si vous ne trouvez aucune solution concernant la bibliothèque, je vous suggère de la remplacer.

Suraj Vaishnav
la source