Nach dem Upgrade auf API 22 und der Unterstützung von lib revision 22 erhalte ich die folgende Warnung:
Warnung: Konflikt mit der Abhängigkeit "com.Android.support:support-annotations". Behobene 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 mit 21.0.3 deklarierten Abhängigkeiten ... Hat eine der abhängigen Bibliotheken, die 21.0.3 verwenden, und Google 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 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 (*)
Schritt 1, wenn Sie sich mit dieser Art von Dingen beschäftigen, ist, sich mit der Befehlszeilenlinie von Gradle vertraut zu machen.
Schritt # 2 besteht darin, den Gradle-Abhängigkeitsbericht auszuführen (z. B. gradle -q app:dependencies
von der Projektwurzel). Dadurch wird die ASCII - Struktur bereitgestellt, wie in der Aktualisierung der Frage gezeigt, und es sollte Ihnen helfen, zu ermitteln, was nach den in Konflikt stehenden Artefaktversionen gefragt wird.
Schritt 3 ist zu entscheiden, was ersetzt werden muss. Sie haben sich dafür entschieden, nur den Konflikt (support-annotations
) zu ersetzen. Persönlich wäre ich mit der Wurzel des falschen Versionsbaums (recyclerview-v7
) gegangen, obwohl dies meines Wissens nach nicht die beste Vorgehensweise in diesem Fall ist.
Schritt 4 besteht darin, die exclude
-Direktive hinzuzufügen, um das, was Sie in Schritt 3 gewählt haben, zu blockieren:
androidTestCompile ('com.Android.support.test.espresso:espresso-contrib:2.0') {
exclude module: 'support-annotations'
}
Schritt # 5 besteht darin, den Haken an dieser Änderung zu testen. Sie sagen, dass espresso-contrib
für die 22.0.0-Edition von support-annotations
benötigt wird. Das kann funktionieren. Das darf nicht. Das hängt von der Rückwärtskompatibilität des Konflikts ab. In diesem Fall sollte support-annotations
ziemlich gut sein.
Schritt # 6 besteht darin, ein Getränk Ihrer Wahl zu konsumieren, das für Ihr Land und Ihre Tageszeit geeignet ist.
Um das Problem zu lösen, fügen Sie die folgende Zeile in mein build.gradle-Skript ein
androidTestCompile 'com.Android.support:support-annotations:xx.x.x'
Ersetzen Sie xx.x.x
durch die Version der Supportanmerkungen, die Ihre App verwendet. Dies wird in Ihren Abhängigkeiten oder in der Gradle-Synchronisierungsnachricht wie folgt angezeigt: Resolved version for app (xx.x.x)
, falls ein Problem beim Synchronisieren auftritt.
Eigentlich handelt es sich um einen Fehler der neuen Update-Version von Espresso Contrib. Sie können diesen Workaround weiterleiten: Android-testing/build.gradle
configurations.all {
resolutionStrategy.force 'com.Android.support:support-annotations:22.1.0'
}
configurations.all {
resolutionStrategy {
force 'com.Android.support:support-annotations:23.1.1'
}
}
Das hat mein Problem gelöst.
Alternativ können Sie gradlew unter Windows und ./gradlew für mac/linux ausführen. Bei Bedarf wird Ihre Abhängigkeit heruntergeladen
Ich stieß auch auf dieses Problem sowie auf andere Konflikte, die appcompat betrafen, und die Lösung, die ich fand, bestand darin, Test-Kompilierungen hinzuzufügen und diese auf die derzeit verwendete SDK zu setzen. 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 =)
für sdkversion 25
androidTestCompile 'com.Android.support:support-annotations:25.2.0'
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 Bibliothek von der Support-Annotation abhängig ist, oder ob eine Bibliothek irrtümlich benannt wurde, und versuchen, sie in gradle wie unten stehend 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 mit der Gradle-Line behoben
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'
Ich hatte das gleiche Problem mit 26.0.0 und 27.1.1 und habe eigentlich nur die frühere Version auf die spätere Version aktualisiert, damit sie funktioniert.
Dies ist ein häufiges Problem im Instrumentationstest, wie in here angegeben, und kann durch einfaches Hinzufügen der Abhängigkeiten für androidTestCompile im build.gradle behoben werden. In meinem Fall kam es zu Konflikten im Zusammenhang mit Appcompat, Recycling und Design. Und durch das Hinzufügen folgender Zeilen aufgelö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'