Die aufgelösten Versionen für App (22.0.0) und Test-App (21.0.3) unterscheiden sich

179

Nach dem Upgrade auf API 22 und der Unterstützung von lib revision 22 wird folgende Warnung angezeigt:

Warnung: Konflikt mit der Abhängigkeit 'com.android.support:support-annotations'. Die aufgelösten Versionen für App (22.0.0) und Test-App (21.0.3) unterscheiden sich.

Gradle selbst ist verzeihender, aber Android Studio nicht so sehr.

Ich habe keine Abhängigkeiten mit 21.0.3 deklariert ... verwendet eine der abhängigen Bibliotheken 21.0.3 und Google hat vergessen, sie mit dem Rest des Stapels zu aktualisieren?

Mein build.gradlemit den Extras ausgeschnitten

android {
  compileSdkVersion 22
  buildToolsVersion '22'

  defaultConfig {
    applicationId "com.REDACTED.android"
    minSdkVersion 14
    targetSdkVersion 22
    renderscriptSupportModeEnabled true
    versionName '1.0.0'
    versionCode 100
  }

  buildTypes {
    release {
      minifyEnabled true
      zipAlignEnabled true
      signingConfig signingConfigs.release
    }

    debug {
      minifyEnabled false
      zipAlignEnabled true
      signingConfig signingConfigs.debug
    }
  }

  dependencies {
    provided 'org.projectlombok:lombok:1.16.2'
    googleCompile 'com.google.android.gms:play-services-base:6.5.87'
    compile 'com.android.support:support-v4:22.0.0'
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.android.support:support-v13:22.0.0'
    compile 'com.android.support:cardview-v7:22.0.0'
    compile 'com.android.support:palette-v7:22.0.0'
    compile 'com.android.support:support-annotations:22.0.0'
    compile 'com.github.chrisbanes.photoview:library:1.2.3'
    compile 'org.apache.commons:commons-lang3:3.3.2'
    compile 'commons-io:commons-io:2.4'
    compile 'commons-codec:commons-codec:1.10'
    compile 'com.jakewharton:butterknife:6.1.0'
    compile 'com.jakewharton:disklrucache:2.0.2'
    compile 'com.squareup:otto:1.3.6'
    compile 'com.squareup.picasso:picasso:2.5.0'
    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'com.squareup.okhttp:okhttp:2.2.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
    compile 'com.squareup.okio:okio:1.2.0'
    compile 'com.flaviofaria:kenburnsview:1.0.6'
    compile 'com.edmodo:cropper:1.0.1'
    compile 'com.getbase:floatingactionbutton:1.8.0'
    compile 'com.nispok:snackbar:2.10.2'
    compile 'com.github.ksoichiro:android-observablescrollview:1.5.0'
    compile 'in.srain.cube:grid-view-with-header-footer:1.0.9'
    compile 'de.hdodenhof:circleimageview:1.2.2'
    compile fileTree(dir: 'libs', include: '*.jar')
    // Test Only Dependencies
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'
  }

Update: (Danke Mark)

Sieht aus wie es Espresso-Beitrag

+--- com.android.support.test:testing-support-lib:0.1 (*)
\--- com.android.support.test.espresso:espresso-contrib:2.0
     +--- com.android.support:recyclerview-v7:21.0.3
     |    +--- com.android.support:support-annotations:21.0.3
     |    \--- com.android.support:support-v4:21.0.3
     |         \--- com.android.support:support-annotations:21.0.3
     +--- com.android.support:support-v4:21.0.3 (*)
     \--- com.android.support.test.espresso:espresso-core:2.0 (*)
copolii
quelle
5
Die Gradle- dependenciesAufgabe kann Ihnen möglicherweise dabei helfen, den Schuldigen zu identifizieren: gradle.org/docs/current/userguide/…
CommonsWare
1
Danke Mark. Es sieht so aus, als wäre espresso-contribes die Ursache ...
copolii
2
Sie können versuchen exclude, die 21.0.3-Edition von zu blockieren recyclerview-v7, die 22.0.0-Edition selbst abzurufen und zu beten, dass sie für espresso-contribdie Anforderungen ausreichend kompatibel sind . Persönlich bin ich erstaunt, dass Sie mit dieser langen Abhängigkeitsliste Ihre
geistige Gesundheit bewahren
1
Ja. Das hat den Trick gemacht. Wenn Sie das als Antwort angeben, gebe ich Ihnen die Beans :) androidTestCompile ('com.android.support.test.espresso: espresso-contrib: 2.0') {Modul ausschließen: 'support-annotations'}
copolii
1
Mein gleiches Problem wurde nur durch einfachen Neustart des Android-Studios gelöst :)
Lakhwinder Singh Dhillon

Antworten:

286

Schritt 1, wenn Sie sich mit solchen Dingen befassen, besteht darin, sich mit der Befehlszeile Gradle vertraut zu machen.

Schritt 2 besteht darin, den Gradle-Abhängigkeitsbericht auszuführen (z. B. gradle -q app:dependenciesvom Projektstamm aus). Dadurch wird der ASCII-Baum bereitgestellt, wie in der Aktualisierung der Frage gezeigt, und Sie können leichter ermitteln, was für die widersprüchlichen Artefaktversionen erforderlich ist.

Schritt 3 besteht darin, zu entscheiden, was ersetzt werden muss. Sie haben beschlossen, nur den Konflikt zu ersetzen ( support-annotations). Persönlich wäre ich mit der Wurzel des Baums mit der falschen Version ( recyclerview-v7) gegangen , obwohl ich weiß, dass dies in diesem Fall möglicherweise nicht die beste Vorgehensweise ist.

Schritt 4 besteht darin, die excludeAnweisung hinzuzufügen, um zu blockieren, was Sie in Schritt 3 ausgewählt haben:

androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.0') {
    exclude module: 'support-annotations'
}

Schritt 5 besteht darin, diese Änderung zu testen. Was Sie tun, ist zu sagen, dass espresso-contrib es sich um die 22.0.0-Ausgabe von handeln muss support-annotations. Das kann funktionieren. Das darf nicht. Dies hängt von der Abwärtskompatibilität des Konflikts ab. In diesem Fall support-annotationssollte es ziemlich gut sein.

Schritt 6 besteht darin, das Getränk Ihrer Wahl zu konsumieren, das für Ihr Gebietsschema und Ihre Tageszeit geeignet ist.

CommonsWare
quelle
4
Ich habe verwendet, exclude group: 'com.android.support', module: 'support-annotations' seit Ihre Version eine Warnung "kann nicht auf Argumenttypen schließen" von gradle
appoll
2
Funktioniert ... erwägen Sie auch, dies auf com.android.support.test anzuwenden: Runner: 0.3, com.android.support.test: rules: 0.3 und com.android.support.test.espresso: espresso-core: 2.2
Uudashr
Wo fügen Sie in Schritt 4 diese androidTestCompile-Direktive hinzu? Wenn ich versuche, diese Syntax zum Abhängigkeitsblock meiner App hinzuzufügen, werden einige Syntaxfehler angezeigt. Da dies jetzt geschrieben ist, ist es etwas schwierig, genau zu sagen, wo Sie es hinzufügen.
OYRM
1
@OYRM: "Wo fügst du diese androidTestCompile-Direktive hinzu?" - in dependencies. Siehe dieses Beispiel von Chiu-Ki Chan.
CommonsWare
16
Schritt # 6 ist der Schlüssel hier
Odaym
146

Um dies zu lösen, habe ich die folgende Zeile in mein build.gradle-Skript eingefügt

androidTestCompile 'com.android.support:support-annotations:xx.x.x'

Ersetzen Sie sie xx.x.xdurch die von Ihrer App verwendete Version der Support-Anmerkungen. Dies wird in Ihren Abhängigkeiten oder in der Gradle-Synchronisierungsnachricht wie folgt angezeigt: Resolved version for app (xx.x.x)Sollte es ein Problem bei der Synchronisierung geben.

Renan Nery
quelle
Beeindruckend. Ich mache das für ein Upgrade, Junitaber ich kann es auch für andere Abhängigkeiten tun.
Jared Burrows
10
Dies ist in der Tat so, wie es die Google-Beispiele tun. In diesem Kommentar heißt es: "Erzwingen Sie die Verwendung von Support-Anmerkungen in der Test-App, da diese intern vom Runner-Modul verwendet werden."
Desseim
Dies war die beste Antwort für mich. Hinweis: Muss auf '23 .1.1 'aktualisiert werden:androidTestCompile 'com.android.support:support-annotations:23.1.1'
David Manpearl
Vielen Dank, in meinem Fall war die Zeile bereits vorhanden, es wurde jedoch ausdrücklich eine widersprüchliche Version angegeben, die auf die erforderliche aktualisiert wurde, und alles funktionierte wie ein Zauber.
RAM237
Wie füge ich das dem build.gradle hinzu?
Ubuntu_noob
58

Eigentlich ist es ein Fehler der neuen Update-Version von Espresso Contrib. Sie können auf diese Problemumgehung verweisen: android-testing / build.gradle

configurations.all {
    resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}
knochig
quelle
2
Das war mein Problem. Ticket ist hier .
Theblang
3
Dies schafft eine Warnung, @ RenanNery Lösung ist besser
Diego Palomar
Das geht nicht Ich bekomme immer noch den Konfliktfehler wegenandroidTestCompile 'com.android.support.test:runner:0.5'
IgorGanapolsky
1
@bony - Link gebrochen
Mushtaq Jameel
Das hat bei mir funktioniert. Ich habe diesen Block in das "android {testOptions {<here>}}"
jwehrle
23

Weitere Informationen finden Sie unter https://github.com/JakeWharton/u2020/blob/05a57bf43b9b61f16d32cbe8717af77cd608b0fb/build.gradle#L136-L140

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

Dies löste mein Problem.

Alternativ können Sie gradlew unter Windows und ./gradlew für Mac / Linux ausführen. Dadurch wird Ihre Abhängigkeit bei Bedarf heruntergeladen

maruti060385
quelle
1
Dies hat mir auch heute (10.11.2018) geholfen, aber mit Version 26.1.0 einen Konflikt mit Version 27.1.1 zu vermeiden.
JB Rainsberger
8

Ich bin auch auf dieses Problem sowie auf andere Konflikte mit Appcompat gestoßen. Die Lösung, die ich gefunden habe, bestand darin , Testkompilierungen hinzuzufügen und sie auf das SDK zu setzen, das Sie gerade verwenden. In meinem Fall ist es 25, also sieht es so aus:

androidTestCompile 'com.android.support:support-annotations:25.+'
androidTestCompile 'com.android.support:appcompat-v7:25.+'
androidTestCompile 'com.android.support:support-v4:25.+'
androidTestCompile 'com.android.support:recyclerview-v7:25.+'
androidTestCompile 'com.android.support:design:25.+'

Wie Sie sehen, habe ich außerdem die Designabhängigkeit hinzugefügt, die sich auf Android Material Design bezieht.

Hoffe es hilft =)

gmartinsnull
quelle
8

für sdkversion 25

     androidTestCompile 'com.android.support:support-annotations:25.2.0'
dc10
quelle
3

Sie können gradlew unter Windows und ./gradlew für Mac / Linux ausführen. Dadurch wird Ihre Abhängigkeit bei Bedarf heruntergeladen.

Sie können überprüfen, ob eine der Bibliotheken von der Support-Annotation abhängig ist oder ob eine Bibliothek mit einem irrtümlichen Namen benannt wurde, und versuchen, sie in Gradle wie unten ausgeschlossen auszuschließen

compile ("org.apache.maven: maven-ant-task: $ {mavenAntTaskVer} ‌") {Gruppe ausschließen: 'junit'}

Fehler: Konflikt mit der Abhängigkeit 'junit: junit'. Die aufgelösten Versionen für App (3.8.1) und Test-App (4.12) unterscheiden sich. Weitere Informationen finden Sie unter g.co/androidstudio/app-test-app-conflict.

Dies war der Fehler, den ich bekam, also habe ich das Problem über der Gradle-Linie behoben

maruti060385
quelle
Dies scheint ein wirklich guter Weg zu sein, um ein solches Problem zu lösen. Versuchen Sie außerdem, diese Befehlszeile ./gradlew: app: dependencies unter Ihrem Projektstammverzeichnis auszuführen. Sie erstellt einen Baum über die Abhängigkeiten Ihres Projekts und überprüft sie sorgfältig. Dann finden Sie heraus, woher der Konflikt stammt.
Frank Jorsn
2

Löschen Sie einfach diese Zeilen in Ihrer build.gradle-Datei:

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
shiv om Bhardwaj
quelle
Das funktioniert nicht so. Es verursacht mehr Fehler im Projekt
0

Dies ist ein häufiges Problem beim hier angegebenen Instrumentierungstest und kann einfach durch Hinzufügen der Abhängigkeiten für androidTestCompile im build.gradle behoben werden. In meinem Fall traten Konflikte in Appcompat-, Recyclerview- und Design-Abhängigkeiten auf. Und durch Hinzufügen der folgenden Zeilen gelöst

    androidTestCompile 'com.android.support:appcompat-v7:23.4.0'
    androidTestCompile 'com.android.support:recyclerview-v7:23.4.0'
    androidTestCompile 'com.android.support:design:23.4.0'
cammando
quelle
0

Ich hatte das gleiche Problem mit 26.0.0 und 27.1.1 und habe nur das erstere auf das spätere aktualisiert, damit es funktioniert.

Waffe X.
quelle