Ich versuche Android And Espresso zu lernen. Ich habe ein paar grundlegende Tutorials gemacht und es hat gut funktioniert. Aber jetzt möchte ich einen Test auf Android-Navigationsschublade machen. Dafür muss ich Gradle Abhängigkeit verwenden androidTestCompile 'com.android.support.test.espresso: espresso-contrib: 2.2.2' aber es verursacht Konflikt mit anderen Abhängigkeiten. Meine Gradel-Datei:
%Vor%Fehler ist in etwa so:
%Vor%gefolgt von: Link für die Espresso-Installation
Ich habe auch versucht, die Annotationsabhängigkeit auszuschließen:
%Vor%TL; DR;
Die neue Version der Bibliothek espresso-contrib 2.2.2
hat jetzt eine Abhängigkeit von com.android.support:appcompat-v7:23.1.1
, die zu einem Konflikt führt, wenn Sie eine andere Version von appcompat-v7
in unserer compile
-Zeitabhängigkeit wie unten verwenden:
Um einen Konflikt zu vermeiden, wenn wir appcompat-v7
Abhängigkeit von espresso-contrib
wie unten ausschließen, bricht es aufgrund einiger Wertabhängigkeiten von design support
lib wieder ab.
Fehler:
Fehler: (69) Fehler beim Abrufen des übergeordneten Elements für das Element: Es wurde keine Ressource gefunden, die dem angegebenen Namen 'TextAppearance.AppCompat.Display1' entspricht.
Hauptursache:
Dies liegt daran, dass die
design
support lib davon abhängig istappcompat-v7
.
Also, wenn wir 'appcompat-v7' Modul ausschließenespresso-contrib
Abhängigkeiten (wie oben), diedesign
support lib wird als heruntergeladen Teil der transitiven Abhängigkeit vonespresso-contrib
lib konnte nicht gefunden werden die kompatible Version vonappcompat-v7 lib(23.1.1)
, die es verwendet intern in seinen Ressourcen-Dateien und gibt somit den oben genannten Fehler.
Die Lösung für das obige Problem besteht also darin, die lib-Abhängigkeit 'design-support' von espresso-contrib
wie unten auszuschließen:
Das löst das Konfliktproblem!
LONGER VERSION (falls jemand interessiert ist):
Um die Gründe verschiedener Konfliktprobleme herauszufinden, die wir bei der Verwendung der 'espresso-contrib' Bibliothek haben, habe ich eine Beispiel-App erstellt, um die Ursache herauszufinden.
%Vor% App erstellt, um 'espresso-contrib' lib-Version 2.2.1 zu verwenden, indem Sie folgende Zeilen in app/build.gradle
file hinzufügen:
}
Hinweis: In diesem Fall importiere ich keine anderen Komponenten der Support-Bibliothek wie zB% code%%.
Das Abhängigkeitsdiagramm für die obige Konfiguration sieht wie folgt aus:
Wie man sehen kann, hat appcompat-v7,recyclerview-v7,etc
lib transitive Abhängigkeiten von Version 23.0.1 von
espresso-contrib 2.2.1
, support-v4
, recyclerview-v7
, etc.
Da ich keine Abhängigkeiten für support-annotations
, recyclerview-v7
in meinem Projekt definiere, würde das obige Setup gut funktionieren.
Aber wenn wir diese als Kompilierabhängigkeiten [wie unten] in unserem Projekt definieren, erhalten wir Versionskonfliktprobleme, wie in Ihrer Frage angegeben.
%Vor%Um diese Konflikte zu vermeiden, fügen wir unseren Espresso-Beitrag lib:
hinzu %Vor% Dies stellt sicher, dass diese Abhängigkeiten nicht als Teil von support-annotations
transitive Abhängigkeiten heruntergeladen werden.
Alles läuft gut mit dem obigen Setup. Keine Probleme!
Die Version build.gradle von App wurde geändert, indem 'espresso-contrib' lib-Version 2.2.2 verwendet wurde, indem die vorherige build.gradle-Datei geändert wurde:
%Vor%Aber wenn ich ein Projekt mit dem obigen Setup erstelle, scheitert das Build mit einem Fehler, der in Frage gestellt wurde.
Fehler:
Fehler: Konflikt mit Abhängigkeit 'com.android.support:appcompat-v7'. Gelöste Versionen für App (23.3.0) und Test-App (23.1.1) unterscheiden sich. Einzelheiten finden Sie Ссылка .
Also, beim Betrachten des Fehlers habe ich eine weitere Zeile zu build.gradle hinzugefügt:
%Vor% Aber das löst das Konfliktproblem nicht und ich bekomme einen Wertabhängigkeitsfehler in den Kommentaren.
Also schaue ich erneut nach dem Abhängigkeitsgraphen meiner App:
Wie man jetzt sehen kann, hat espresso-contrib
lib jetzt eine transitive Abhängigkeit von espresso-contrib 2.2.2
, was den obigen Konflikt verursacht.
Also müssen wir unterhalb der Zeile com.android.support:design:23.1.1
block:
Dies löst das Konfliktproblem in der lib Version 2.2.2!
Tags und Links android-gradle android-testing android-espresso