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.gradle
mit 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 (*)
android
android-support-library
copolii
quelle
quelle
dependencies
Aufgabe kann Ihnen möglicherweise dabei helfen, den Schuldigen zu identifizieren: gradle.org/docs/current/userguide/…espresso-contrib
es die Ursache ...exclude
, die 21.0.3-Edition von zu blockierenrecyclerview-v7
, die 22.0.0-Edition selbst abzurufen und zu beten, dass sie fürespresso-contrib
die Anforderungen ausreichend kompatibel sind . Persönlich bin ich erstaunt, dass Sie mit dieser langen Abhängigkeitsliste IhreAntworten:
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:dependencies
vom 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
exclude
Anweisung hinzuzufügen, um zu blockieren, was Sie in Schritt 3 ausgewählt haben: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 musssupport-annotations
. Das kann funktionieren. Das darf nicht. Dies hängt von der Abwärtskompatibilität des Konflikts ab. In diesem Fallsupport-annotations
sollte 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.
quelle
exclude group: 'com.android.support', module: 'support-annotations'
seit Ihre Version eine Warnung "kann nicht auf Argumenttypen schließen" von gradledependencies
. Siehe dieses Beispiel von Chiu-Ki Chan.Um dies zu lösen, habe ich die folgende Zeile in mein build.gradle-Skript eingefügt
Ersetzen Sie sie
xx.x.x
durch 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.quelle
Junit
aber ich kann es auch für andere Abhängigkeiten tun.androidTestCompile 'com.android.support:support-annotations:23.1.1'
Eigentlich ist es ein Fehler der neuen Update-Version von Espresso Contrib. Sie können auf diese Problemumgehung verweisen: android-testing / build.gradle
quelle
androidTestCompile 'com.android.support.test:runner:0.5'
Weitere Informationen finden Sie unter https://github.com/JakeWharton/u2020/blob/05a57bf43b9b61f16d32cbe8717af77cd608b0fb/build.gradle#L136-L140
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
quelle
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:
Wie Sie sehen, habe ich außerdem die Designabhängigkeit hinzugefügt, die sich auf Android Material Design bezieht.
Hoffe es hilft =)
quelle
für sdkversion 25
quelle
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
quelle
Löschen Sie einfach diese Zeilen in Ihrer build.gradle-Datei:
quelle
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
quelle
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.
quelle