Android tests de construire erreur: Plusieurs dex fichiers de définir Landroid/support/test/BuildConfig
J'essaye d'ajouter l'Espresso 2 de mon projet (qui a aussi beaucoup d'autres dépendances), mais je suis de frapper cette erreur lorsque vous essayez d'exécuter 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)
...
Le non-bâti d'essai fonctionne très bien.
N'quelqu'un a des conseils sur la meilleure façon de déboguer ce?
J'ai essayé de courir ./gradlew -q :<my_project>:dependencies
, mais je ne peux pas voir les problèmes évidents (mais je ne sais pas beaucoup au sujet de l'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 aussi essayé de chercher les sous-dossiers de mon build/intermediates
répertoire, mais je ne pouvais pas voir tout de fumer des armes à feu (bien que je ne suis pas sûr que j'étais à la recherche de toutes les dépendance externe Pots dans le droit chemin).
Ici est 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: quand je l'ai mise à jour de com.android.tools.build:gradle:1.0.0
à 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.
- Publier vos
build.gradle.
- Vous souvenez-vous de la dépendance dernière que vous avez ajoutés avant l'erreur? Vous avez donc beaucoup de.
- Aussi, nous ne savons pas ce qui se est
compile fileTree(dir: 'libs', include: '*.jar')
,compile project(':CookbriteJava')
etcompile project(':camera')
. - Je pensais que la sortie de la Gradle
dependencies
tâche a montré tout ce dont vous auriez besoin? Je vais mettre à jour la question avec mon build.gradle trop. - J'ai le plus récemment ajouté les deux dernières dans la liste pour l'Espresso, et pour avoir passé une très similaires erreur que j'ai eu à mettre à jour ma Bibliothèque de prise en charge et de Google Play Services dépendances, et de supprimer AssertJ.
gradlew dependencies
tâches montre labuild.gradle
depdencies, il ne sait pas sur les autres projets*.jars
.- Cette erreur est un message le long des lignes de "pot inclus deux fois dans LICENSE.txt"?
- Non, il n'est pas - c'est précisément pour se plaindre d'une double BuildConfig classe.
- Êtes-vous predexing? Pouvez s'il vous plaît poster l'ensemble de votre
build.gradle
? - Je suis predexing - je ne veux pas de poste de l'ensemble de mon
build.gradle
, mais je vais poster quelques autres mises à jour... - Avez-vous des autres informations autres que celles que l'exception? S'il ya quelque chose de pertinent dans le construire de sortie, vous devez l'ajouter. Aussi, ce ne sera pas résolu votre problème, mais c'est toujours une bonne idée, mais vous devriez vous débarrasser de ajoutant explicitement dexmaker et mockito-core, parce qu'ils sont déjà ajoutés transitivement par dexmaker-mockito (vous pouvez le voir dans votre gradlew -q dépendances de sortie). Je ne vois pas de doublons dans votre compiler portée, mais il y a beaucoup de dépendances, donc je ne peux pas dire entièrement.
- C'est ce que je pensais. Essayez
gradlew clean
et puisgradlew assembleDebug
. Je crois que votre problème est le fait que vous êtes la construction d'unbuild.config
qui est déjàpre-dexed
puis ajouter plus à votredex
, plus tard. Cela se produit souvent? Quand est la dernière fois que votre nettoyés? - J'ai fait Nettoyer s'appuie pour beaucoup, et un collègue a essayé également de la construction de cette branche de trop (avec la même panne le résultat). Je vais essayer de Daniel suggestion pour l'instant...
- Je suis en train de vous dire de construire sans predexing.
- Mon build est déjà très lent, de sorte que la désactivation de predexing n'est pas quelque chose que je veux faire (même si je vais essayer juste pour voir si cela élimine tous les autres problèmes).
- Je vous remercie. Je veux apprendre de cette erreur bizarre moi-même comme il est difficile de dupliquées sur ma fin.
- Un peu de chance avec mes suggestions?
Vous devez vous connecter pour publier un commentaire.
Mise à jour (9/07/2015):
Vous pouvez continuer à travailler avec 22.2.1 si vous utilisez les éléments suivants sont exclus:
Si vous dépendez d'
espresso-contrib
, vous avez besoin de l'exclure ainsi.Mise à jour (8/03/2015):
Avec le soutien de la bibliothèque 22.2.1, les dépendances sont cassé de nouveau; merci de ne pas mettre à niveau vers 22.2.1 jusqu'à ce qu'un nouveau coureur est libéré.
Mise à jour (6/04/2015):
Avec la dernière version de coureur de 0,3 et de règles de 0,3, cette réponse n'est plus nécessaire. Vous pouvez simplement utiliser
avec les dernières bibliothèques de prise en charge. (
22.2.0
de cette écriture)Mise à jour (5/30/2015):
Mise à jour (4/24/2015):
Le problème est que
com.android.support:support-v4:22.1.1
est en conflit aveccom.android.support.test:runner:0.2
(car cela dépend ducom.android.support:support-v4:22.0.0
).com.android.support.test.espresso:espresso-core:2.1
a une dépendance surcom.android.support.test:runner:0.2
, de sorte qu'il provoque également la même erreur.Donc, cette combinaison de travail:
...et il en sera de celui-ci (sans
'com.android.support.test:runner:0.2'
):Réponse Originale À Cette Question:
Contrairement à ce que l'Espresso documentation dit, vous devez supprimer cette dépendance:
androidTestCompile 'com.android.support.test:runner:0.2'
Comme il est la cause de la version de la bibliothèque de conflit.
Vous devez également mettre à jour vers Android plugin gradle 1.1.1, en tant que version vous dira la version exacte de conflit, ce qui est utile dans ce cas.
espresso-core
vsespresso-contrib
?com.android.support.test:testing-support-lib:0.1
dépendance résolu mon problème. merci!compile 'com.android.support:support-annotations:22.2.1'
est cassé, trop :-/espresso-contrib:2.0
. Comment résoudre ce problème?Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.TaskStackBuilder android.support.v4.app.TaskStackBuilder.addParentStack(android.app.Activity)' on a null object reference
Aider 🙁Une autre astuce utile est de savoir comment la force de la résolution des dépendances à une version spécifique.
En voici une:
...et voici un autre:
À l'aide de l'une de ces avec
com.android.support.test.espresso:espresso-core:2.1
devrait fonctionner.Voir le
Forcing consistent version for a group of libraries
section dans la documentation Gradle pour plus d'informations.J'ai récemment rencontré ce message d'erreur après que nous avons permis à incrémentielle gradle construit.
Cela a été résolu par la désactivation de predexing bibliothèques.
preDexLibraries = false
? Cela fonctionne pour moi, mais vais-je rencontrer des problèmes de performance, alors?Ma solution:
+
J'ai eu cette erreur en essayant de mettre en place Espresso ainsi. Essayez d'utiliser
espresso-contrib:2.1
, pas2.0
Essayer d'exclure les opérations suivantes à partir de l'espresso (un à la fois):
Probablement besoin de faire la même chose avec
runner
Selon ce rapport de bug, vous pouvez également utiliser
resolutionStrategy
:C'est la solution qui a fonctionné pour moi et m'a permis d'utiliser la version la plus récente de appcompat-v7 et appcompat-v4.