Android Espresso-Cotrib Grapple Build fehlgeschlagen

7

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%     
HirenPatel_ 18.05.2016, 18:38
quelle

2 Antworten

27

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:

%Vor%

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.

%Vor%

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 ist    appcompat-v7 .
  Also, wenn wir 'appcompat-v7' Modul ausschließen    espresso-contrib Abhängigkeiten (wie oben), die design support lib wird als heruntergeladen   Teil der transitiven Abhängigkeit von espresso-contrib lib konnte nicht gefunden werden   die kompatible Version von appcompat-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:

%Vor%

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:

%Vor%

}

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!

%Vor%

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:

hinzufügen %Vor%

Dies löst das Konfliktproblem in der lib Version 2.2.2!

    
Droidwala 27.05.2016, 13:31
quelle
0

tun Sie unter

%Vor%     
WenChao 20.05.2016 05:59
quelle