Po aktualizacji do API 22 i obsłudze wersji lib 22 otrzymuję następujące ostrzeżenie:
Ostrzeżenie: konflikt z zależnością „com.android.support:support-annotations”. Rozwiązane wersje aplikacji (22.0.0) i aplikacji testowej (21.0.3) różnią się.
Sam Gradle jest bardziej wyrozumiały, ale Android Studio nie tyle.
Nie mam zadeklarowanych zależności z wersją 21.0.3 ... czy jedna z bibliotek zależnych używa wersji 21.0.3, a Google zapomniał zaktualizować ją z resztą partii?
Moje build.gradle
z dodatkami wyciętymi
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'
}
Aktualizacja: (dzięki znak)
Wygląda na to, że to dodatek do espresso
+--- 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
źródło
źródło
dependencies
Zadanie Gradle może pomóc ci zidentyfikować winowajcę: gradle.org/docs/current/userguide/…espresso-contrib
to, że jest to przyczyną ...exclude
zablokować wydanie 21.0.3recyclerview-v7
, pobrać wersję 22.0.0 samemu i modlić się, aby były one wystarczająco zgodne zespresso-contrib
potrzebami. Osobiście jestem zdumiony, że zachowujesz zdrowie psychiczne dzięki tej długiej liście zależności ... :-)Odpowiedzi:
Krok 1, gdy masz do czynienia z tego rodzaju rzeczami, to zaznajomienie się z Gradle w wierszu poleceń.
Krok 2 to uruchomienie raportu zależności Gradle (np.
gradle -q app:dependencies
Z katalogu głównego projektu). Spowoduje to udostępnienie drzewa ASCII, jak pokazano w aktualizacji pytania, i powinno pomóc w określeniu, o co proszone są wersje w artefaktach powodujące konflikt.Krok 3 polega na podjęciu decyzji, co należy wymienić. Wybrałeś zamianę tylko konfliktu (
support-annotations
). Osobiście wybrałbym korzeń drzewa niewłaściwej wersji (recyclerview-v7
), choć dla wszystkich wiem, że może nie być to najlepszy sposób działania w tym przypadku.Krok # 4 polega na dodaniu
exclude
dyrektywy, aby zablokować to, co wybrałeś w kroku # 3:Krok # 5 polega na przetestowaniu tej zmiany. To, co robisz, to mówienie, że
espresso-contrib
ma do czynienia z edycją 22.0.0support-annotations
. To może zadziałać. To może nie być. To zależy od kompatybilności wstecznej konfliktu. W takim przypadkusupport-annotations
powinno być całkiem nieźle.Krok # 6 polega na wypiciu wybranego przez Ciebie napoju, odpowiedniego dla Twojego regionu i pory dnia.
źródło
exclude group: 'com.android.support', module: 'support-annotations'
ponieważ twoja wersja podniosła ostrzeżenie „nie można wnioskować o typach argumentów” z gradledependencies
. Zobacz tę próbkę od Chiu-Ki Chan.Aby to rozwiązać, dodaj poniższy wiersz do mojego skryptu build.gradle
Zastąp
xx.x.x
dowolną wersją adnotacji pomocy technicznej używanej przez aplikację - zostanie to pokazane w zależnościach lub komunikat Stopień synchronizacji jako: wResolved version for app (xx.x.x)
przypadku wystąpienia problemu z synchronizacją.źródło
Junit
ale całkowicie za gotówkę. Mogę to zrobić również w przypadku innych zależności.androidTestCompile 'com.android.support:support-annotations:23.1.1'
W rzeczywistości jest to błąd nowej aktualizacji Espresso Contrib, możesz odnieść się do tego obejścia: testowanie Androida / build.gradle
źródło
androidTestCompile 'com.android.support.test:runner:0.5'
Proszę zapoznać się https://github.com/JakeWharton/u2020/blob/05a57bf43b9b61f16d32cbe8717af77cd608b0fb/build.gradle#L136-L140
To rozwiązało mój problem.
Alternatywnie możesz uruchomić gradlew na Windows i ./gradlew dla mac / linux, to pobierze twoją zależność w razie potrzeby
źródło
Zetknąłem się z tym problemem, a także z innymi konfliktami związanymi z aplikacją appcompat, i znalazłem rozwiązanie polegające na dodaniu kompilacji testowych i ustawieniu ich na sdk, którego obecnie używasz. W moim przypadku jest to 25, więc wygląda to tak:
Ponadto, jak widać, dodałem zależność projektową, która jest związana z Android Material Design.
Mam nadzieję, że to pomaga =)
źródło
dla sdkversion 25
źródło
możesz uruchomić gradlew na Windowsie i ./gradlew dla Mac / Linux, to pobierze twoją zależność w razie potrzeby.
Możesz sprawdzić, czy jedna z bibliotek ma zależność od adnotacji wsparcia, czy jakaś biblioteka, której nazwa jest błędnie nazwana, i spróbuj wykluczyć ją w stopniach, takich jak poniżej
compile ("org.apache.maven: maven-ant-tasks: $ {mavenAntTaskVer} ") {wyklucz grupę: 'junit'}
Błąd: Konflikt z zależnością „junit: junit”. Rozwiązane wersje aplikacji (3.8.1) i aplikacji testowej (4.12) różnią się. Aby uzyskać szczegółowe informacje, zobacz g.co/androidstudio/app-test-app-conflict.
to był błąd, który otrzymywałem, więc użyłem powyżej linii stopni, aby naprawić problem
źródło
Po prostu usuń te linie z pliku build.gradle:
źródło
Jest to powszechny problem w teście oprzyrządowania, jak stwierdzono tutaj, i można go rozwiązać, dodając zależności dla androidTestCompile w build.gradle. W moim przypadku pojawił się konflikt w zależnościach appcompat, recyclinglerview i projektowych. I rozwiązane przez dodanie następujących wierszy
źródło
Miałem ten sam problem z 26.0.0 i 27.1.1 i właściwie właśnie uaktualniłem ten pierwszy do późniejszego, aby działał.
źródło