Erreur de compilation des tests Android: plusieurs fichiers dex définissent Landroid / support / test / BuildConfig

J'essaie d'ajouter Espresso 2 à mon projet (qui comporte également beaucoup d'autres dépendances), mais je frappe cette erreur lors de l'exécution des tests:

UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Landroid/support/test/BuildConfig; at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596) at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554) at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535) ... 

La construction sans test fonctionne bien.

  • Javax.net.ssl.SSLException lors de l'envoi de sous-titres Amazon S3
  • Comment effacer le cache de gradle?
  • Android onActivityResult est toujours 0
  • Est-ce comment programmer une méthode java pour exécuter 1 seconde plus tard?
  • Android - Comment puis-je lier mon application gratuite à la version Pro?
  • Télécharger et télécharger le profil des tarifs dans Android
  • Est-ce que quelqu'un a des conseils sur la meilleure façon de déboguer cela?

    J'ai essayé de s'exécuter ./gradlew -q :<my_project>:dependencies , mais je ne vois pas de problèmes évidents (même si je ne connais pas beaucoup d'interprétation de sa sortie):

     <snip> androidTestCompile - Classpath for compiling the androidTest sources. +--- com.squareup.spoon:spoon-client:1.1.2 +--- com.google.dexmaker:dexmaker-mockito:1.0 | +--- com.google.dexmaker:dexmaker:1.0 | \--- org.mockito:mockito-core:1.9.5 | +--- org.hamcrest:hamcrest-core:1.1 | \--- org.objenesis:objenesis:1.0 +--- com.google.dexmaker:dexmaker:1.0 +--- org.mockito:mockito-core:1.9.5 (*) +--- com.jayway.android.robotium:robotium-solo:5.3.1 +--- com.android.support.test.espresso:espresso-core:2.0 | +--- com.squareup:javawriter:2.1.1 | +--- org.hamcrest:hamcrest-integration:1.1 | | \--- org.hamcrest:hamcrest-core:1.1 | +--- org.hamcrest:hamcrest-library:1.1 | | \--- org.hamcrest:hamcrest-core:1.1 | +--- javax.inject:javax.inject:1 | +--- com.android.support.test.espresso:espresso-idling-resource:2.0 | +--- com.android.support.test:testing-support-lib:0.1 | | \--- junit:junit-dep:4.10 | | \--- org.hamcrest:hamcrest-core:1.1 | +--- com.google.code.findbugs:jsr305:2.0.1 | +--- javax.annotation:javax.annotation-api:1.2 | \--- org.hamcrest:hamcrest-core:1.1 \--- com.android.support.test:runner:0.2 +--- junit:junit-dep:4.10 (*) +--- com.android.support.test:exposed-instrumentation-api-publish:0.2 \--- com.android.support:support-annotations:22.0.0 <snip> compile - Classpath for compiling the main sources. +--- com.android.support:appcompat-v7:22.1.0 | \--- com.android.support:support-v4:22.1.0 | \--- com.android.support:support-annotations:22.1.0 +--- com.android.support:support-v4:22.1.0 (*) +--- com.afollestad:material-dialogs:0.7.2.4 | +--- com.android.support:support-v4:22.0.0 -> 22.1.0 (*) | +--- com.android.support:appcompat-v7:22.0.0 -> 22.1.0 (*) | +--- com.android.support:support-annotations:22.0.0 -> 22.1.0 | \--- com.android.support:recyclerview-v7:22.0.0 | +--- com.android.support:support-v4:22.0.0 -> 22.1.0 (*) | \--- com.android.support:support-annotations:22.0.0 -> 22.1.0 +--- com.google.android.gms:play-services-base:7.0.0 | \--- com.android.support:support-v4:22.0.0 -> 22.1.0 (*) +--- com.google.android.gms:play-services-gcm:7.0.0 | \--- com.google.android.gms:play-services-base:7.0.0 (*) +--- de.greenrobot:greendao:1.3.7 +--- de.greenrobot:eventbus:2.2.0 +--- com.squareup.wire:wire-runtime:1.4.0 | \--- com.squareup.okio:okio:0.6.0 -> 1.0.1 +--- com.squareup.okio:okio:1.0.1 +--- com.squareup.okhttp:okhttp-urlconnection:2.0.0 | \--- com.squareup.okhttp:okhttp:2.0.0 | \--- com.squareup.okio:okio:1.0.0 -> 1.0.1 +--- com.squareup.retrofit:retrofit:1.6.0 | \--- com.google.code.gson:gson:2.2.4 +--- com.squareup.retrofit:converter-wire:1.6.0 | +--- com.squareup.retrofit:retrofit:1.6.0 (*) | \--- com.squareup.wire:wire-runtime:1.2.0 -> 1.4.0 (*) +--- com.squareup.okhttp:okhttp:2.0.0 (*) +--- com.squareup.picasso:picasso:2.4.0 +--- com.path:android-priority-jobqueue:1.1.2 | \--- com.google.android:android:2.2.1 | +--- commons-logging:commons-logging:1.1.1 | +--- org.apache.httpcomponents:httpclient:4.0.1 | | +--- org.apache.httpcomponents:httpcore:4.0.1 | | +--- commons-logging:commons-logging:1.1.1 | | \--- commons-codec:commons-codec:1.3 | +--- org.khronos:opengl-api:gl1.1-android-2.1_r1 | +--- xerces:xmlParserAPIs:2.6.2 | +--- xpp3:xpp3:1.1.4c | \--- org.json:json:20080701 +--- com.netflix.rxjava:rxjava-android:0.16.1 | \--- com.netflix.rxjava:rxjava-core:0.16.1 +--- com.nineoldandroids:library:2.4.0 +--- it.sephiroth.android.library.horizontallistview:hlistview:1.2.2 | \--- com.android.support:support-v4:19.1.+ -> 22.1.0 (*) +--- com.joooonho:selectableroundedimageview:1.0.1 +--- com.crashlytics.sdk.android:crashlytics:2.0.1 | +--- com.crashlytics.sdk.android:answers:1.0.1 | | \--- io.fabric.sdk.android:fabric:1.0.1 | +--- io.fabric.sdk.android:fabric:1.0.1 | \--- com.crashlytics.sdk.android:beta:1.0.1 | \--- io.fabric.sdk.android:fabric:1.0.1 +--- com.mixpanel.android:mixpanel-android:4.5.3 \--- com.facebook.android:facebook-android-sdk:4.0.0 +--- com.android.support:support-v4:[21,22) -> 22.1.0 (*) \--- com.parse.bolts:bolts-android:1.1.4 <snip> 

    J'ai également essayé de rechercher des sous-dossiers de mon répertoire de build/intermediates , mais je ne pouvais voir aucun pistolet fumeur (même si je ne suis pas sûr de rechercher tous les JAR de dépendance externes dans le bon sens).

    Voici la section de dépendance de mon build.gradle:

     dependencies { compile 'com.android.support:appcompat-v7:22.1.0' compile 'com.android.support:support-v4:22.1.0' compile 'com.afollestad:material-dialogs:0.7.2.4' compile 'com.google.android.gms:play-services-base:7.0.0' compile 'com.google.android.gms:play-services-gcm:7.0.0' compile 'de.greenrobot:greendao:1.3.7' compile 'de.greenrobot:eventbus:2.2.0' compile 'com.squareup.wire:wire-runtime:1.4.0' compile 'com.squareup.okio:okio:1.0.1' compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' compile 'com.squareup.retrofit:retrofit:1.6.0' compile 'com.squareup.retrofit:converter-wire:1.6.0' compile 'com.squareup.okhttp:okhttp:2.0.0' compile 'com.squareup.picasso:picasso:2.4.0' compile 'com.path:android-priority-jobqueue:1.1.2' compile 'com.netflix.rxjava:rxjava-android:0.16.1' compile 'com.nineoldandroids:library:2.4.0' compile 'it.sephiroth.android.library.horizontallistview:hlistview:1.2.2' compile 'com.joooonho:selectableroundedimageview:1.0.1' compile('com.crashlytics.sdk.android:crashlytics:2.0.1@aar') { transitive = true; } compile "com.mixpanel.android:mixpanel-android:4.5.3" compile "com.facebook.android:facebook-android-sdk:4.0.0" // For the Rollbar JAR, as it is not available in Maven central compile fileTree(dir: 'libs', include: '*.jar') androidTestCompile 'com.squareup.spoon:spoon-client:1.1.2' androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.0' androidTestCompile 'com.google.dexmaker:dexmaker:1.0' androidTestCompile 'org.mockito:mockito-core:1.9.5' androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.3.1' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0' androidTestCompile 'com.android.support.test:runner:0.2' } 

    Mise à jour: lorsque je met à jour de com.android.tools.build:gradle:1.0.0 vers com.android.tools.build:gradle:1.1.1 , je reçois cet avertissement:

     Warning:Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app (22.1.0) and test app (22.0.0) differ. 

  • Décompte sur l'édition d'impression sans fil <issue> d'Android Lint
  • DatePicker affiche une mauvaise valeur du mois
  • L'attribut "barLength" a déjà été défini
  • Choisir le bon niveau d'API pour mon application Android
  • MediaMetadataRetriever setDataSource lance IllegalArgumentException
  • Slider Menu des deux côtés (droite et gauche) en une seule activité
  • 7 Solutions collect form web for “Erreur de compilation des tests Android: plusieurs fichiers dex définissent Landroid / support / test / BuildConfig”

    Mise à jour (9/07/2015):

    Vous pouvez continuer à travailler avec 22.2.1 si vous utilisez ce qui suit exclut:

     androidTestCompile ('com.android.support.test.espresso:espresso-core:2.2') { exclude group: 'com.android.support', module: 'support-annotations' } androidTestCompile ('com.android.support.test:runner:0.3') { exclude group: 'com.android.support', module: 'support-annotations' } androidTestCompile ('com.android.support.test:rules:0.3') { exclude group: 'com.android.support', module: 'support-annotations' } 

    Si vous dépendez d' espresso-contrib , vous devez également l'exclure.

    Mise à jour (8/03/2015):

    Avec la bibliothèque de support 22.2.1, les dépendances sont à nouveau déclenchées; Ne passez pas à 22.2.1 jusqu'à ce qu'un nouveau coureur soit diffusé.

    Mise à jour (6/04/2015):

    Avec la dernière version de runner 0.3 et les règles 0.3, cette réponse n'est plus nécessaire. Vous pouvez simplement utiliser

     androidTestCompile 'com.android.support.test:runner:0.3' androidTestCompile 'com.android.support.test:rules:0.3' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2' 

    Avec les dernières bibliothèques de support. ( 22.2.0 partir de cette écriture)

    Mise à jour (30/05/2015):

     compile 'com.android.support:appcompat-v7:22.2.0' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2' // com.android.support.test:testing-support-lib:0.1 // <-- causes issue 

    Mise à jour (24/04/2015):

    Le problème est que com.android.support:support-v4:22.1.1 est en conflit avec com.android.support.test:runner:0.2 (cela dépend de com.android.support:support-v4:22.0.0 ) .

    com.android.support.test.espresso:espresso-core:2.1 a une dépendance sur com.android.support.test:runner:0.2 , donc il provoque également la même erreur.

    Donc, cette combinaison fonctionnera:

     compile 'com.android.support:support-v4:22.0.0' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.1' 

    … et aussi celui-là ( sans 'com.android.support.test:runner:0.2' ):

     compile 'com.android.support:support-v4:22.1.0' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0' 

    Réponse initiale:

    Contrairement à ce que la documentation Espresso dit , vous devez supprimer cette dépendance:

    androidTestCompile 'com.android.support.test:runner:0.2'

    Comme c'est la cause du conflit de version de la bibliothèque.

    Vous devriez également mettre à jour sur Android gradle plugin 1.1.1, car cette version vous indiquera le conflit de version exact, ce qui est utile dans ce cas.

    Un autre conseil utile est de forcer la résolution de dépendance à une version spécifique.

    Voici un moyen:

     configurations.all { resolutionStrategy.force 'com.android.support:support-annotations:22.0.0' } 

    … et voici un autre:

     configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> if (details.requested.group == 'com.android.support') { details.useVersion '22.0.0' } } } 

    En utilisant l'un de ces éléments avec com.android.support.test.espresso:espresso-core:2.1 devrait fonctionner.

    Consultez la Forcing consistent version for a group of libraries section Forcing consistent version for a group of libraries dans la documentation de Gradle pour plus d'informations.

    J'ai récemment rencontré cette erreur après avoir activé des builds gradle graduel.

     dexOptions { javaMaxHeapSize "2g" incremental true } 

    Cela a été résolu en désactivant les bibliothèques de predexing.

     dexOptions { javaMaxHeapSize "2g" incremental true preDexLibraries = false } 

    Ma solution:

     compile 'com.android.support:appcompat-v7:22.1.0' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.1' androidTestCompile 'com.android.support:support-annotations:22.1.0' androidTestCompile 'com.android.support.test:runner:0.2' 

    +

     android { packagingOptions { exclude 'LICENSE.txt' } } 

    J'ai eu cette erreur en essayant de configurer Espresso aussi. Essayez d'utiliser espresso-contrib:2.1 , pas 2.0

    Essayez d'exclure ce qui suit de l'espresso (un à la fois):

     androidTestCompile('com.android.support.test.espresso:espresso-core:2.1') { exclude group: 'javax.inject' exclude group: 'com.google.code.findbugs' exclude group: 'com.android.support', module: 'support-annotations' } 

    Probablement besoin de faire de même avec le runner

    Selon ce rapport de bogue , vous pouvez également utiliser resolutionStrategy :

     allprojects { repositories { mavenCentral() maven { url 'http://download.crashlytics.com/maven' } } configurations.all { resolutionStrategy.force 'com.android.support:support-annotations:22.2.0' } } 

    C'est la solution qui a fonctionné pour moi et m'a permis d'utiliser la version la plus récente d'appcompat-v7 et appcompat-v4.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.