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.

  • Android - Nouveau calendrier DatePicker et TimePicker
  • Comment désactiver la ligne bleue sous ActionBar (ActionBarSherlock)?
  • Kotlin Extensions et fragments Android
  • Kivy - Plyer - Android - envoi de notification alors que l'application ne fonctionne pas
  • Android utilisant des mises en page comme modèle pour créer plusieurs instances de mise en page
  • Obtenir le flux vidéo IP Cam sur Android (MJEPG)
  • 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. 

  • Cycle de vie de la classe d'application pendant le fonctionnement du service
  • Dessiner le texte multi-lignes sur Toile
  • Comment puis-je définir des alarmes exactes et répétées dans Android 4.4?
  • Exécuter plusieurs AsyncTasks en même temps - pas possible?
  • JAVAH ne peut pas trouver de classe (android ndk)
  • Informations sur les périphériques Android
  • 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.