Rozwiązane wersje aplikacji (22.0.0) i aplikacji testowej (21.0.3) różnią się

179

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.gradlez 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 (*)
copolii
źródło
5
dependenciesZadanie Gradle może pomóc ci zidentyfikować winowajcę: gradle.org/docs/current/userguide/…
CommonsWare
1
Dzięki Mark. Wygląda na espresso-contribto, że jest to przyczyną ...
copolii
2
Możesz spróbować excludezablokować wydanie 21.0.3 recyclerview-v7, pobrać wersję 22.0.0 samemu i modlić się, aby były one wystarczająco zgodne z espresso-contribpotrzebami. Osobiście jestem zdumiony, że zachowujesz zdrowie psychiczne dzięki tej długiej liście zależności ... :-)
CommonsWare
1
Tak. To załatwiło sprawę. Jeśli podasz to jako odpowiedź, dam ci fasolę :) androidTestCompile ('com.android.support.test.espresso: espresso-contrib: 2.0') {wyklucz moduł: 'adnotacje-wsparcie'}
copolii
1
Ten sam problem został rozwiązany przez proste ponowne uruchomienie studia Android :)
Lakhwinder Singh Dhillon

Odpowiedzi:

286

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:dependenciesZ 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 excludedyrektywy, aby zablokować to, co wybrałeś w kroku # 3:

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

Krok # 5 polega na przetestowaniu tej zmiany. To, co robisz, to mówienie, że espresso-contrib ma do czynienia z edycją 22.0.0 support-annotations. To może zadziałać. To może nie być. To zależy od kompatybilności wstecznej konfliktu. W takim przypadku support-annotationspowinno być całkiem nieźle.

Krok # 6 polega na wypiciu wybranego przez Ciebie napoju, odpowiedniego dla Twojego regionu i pory dnia.

CommonsWare
źródło
4
Użyłem, exclude group: 'com.android.support', module: 'support-annotations' ponieważ twoja wersja podniosła ostrzeżenie „nie można wnioskować o typach argumentów” z gradle
appoll
2
Działa ... rozważ również zastosowanie tego do com.android.support.test: runner: 0.3, com.android.support.test: rules: 0.3 i com.android.support.test.espresso: espresso-core: 2.2
uudashr
W kroku 4, gdzie dodajesz tę dyrektywę androidTestCompile? Jeśli spróbuję dodać tę składnię do bloku zależności mojej aplikacji, wystąpią błędy składniowe. Jak to jest teraz napisane, trudno jest dokładnie powiedzieć, gdzie go dodać.
OYRM
1
@OYRM: „gdzie dodajesz tę dyrektywę androidTestCompile?” - w dependencies. Zobacz tę próbkę od Chiu-Ki Chan.
CommonsWare
16
Krok nr 6 jest tutaj kluczowy
Odaym
146

Aby to rozwiązać, dodaj poniższy wiersz do mojego skryptu build.gradle

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

Zastąp xx.x.xdowolną wersją adnotacji pomocy technicznej używanej przez aplikację - zostanie to pokazane w zależnościach lub komunikat Stopień synchronizacji jako: w Resolved version for app (xx.x.x)przypadku wystąpienia problemu z synchronizacją.

Renan Nery
źródło
Łał. Robię to w celu aktualizacji, Junitale całkowicie za gotówkę. Mogę to zrobić również w przypadku innych zależności.
Jared Burrows,
10
Tak właśnie robią to próbki Google , komentarz brzmi: „Wymuś użycie adnotacji pomocniczych w aplikacji testowej, ponieważ jest on wykorzystywany wewnętrznie przez moduł runner”.
desseim
To była dla mnie najlepsza odpowiedź. Uwaga: Należy zaktualizować do wersji „23 .1.1”:androidTestCompile 'com.android.support:support-annotations:23.1.1'
David Manpearl
Dzięki, w moim przypadku linia już tam była, ale wyraźnie podała sprzeczną wersję, zaktualizowano do wymaganej i wszystko działało jak urok.
RAM237,
jak dodać to do build.gradle?
ubuntu_noob
58

W rzeczywistości jest to błąd nowej aktualizacji Espresso Contrib, możesz odnieść się do tego obejścia: testowanie Androida / build.gradle

configurations.all {
    resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}
kościsty
źródło
2
To był mój problem. Bilet jest tutaj .
theblang
3
To tworzy ostrzeżenie, rozwiązanie @ RenanNery jest lepsze
Diego Palomar
To nie działa. Nadal androidTestCompile 'com.android.support.test:runner:0.5'
pojawia się
1
@bony - Link zepsuty
Mushtaq Jameel
To zadziałało dla mnie. Umieszczam ten blok w „androidie {testOptions {<here>}}”
jwehrle
23

Proszę zapoznać się https://github.com/JakeWharton/u2020/blob/05a57bf43b9b61f16d32cbe8717af77cd608b0fb/build.gradle#L136-L140

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

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

maruti060385
źródło
1
Pomogło mi to również dzisiaj (2018-11-10), ale w wersji 26.1.0, uniknąć konfliktu z wersją 27.1.1.
JB Rainsberger,
8

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:

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.+'

Ponadto, jak widać, dodałem zależność projektową, która jest związana z Android Material Design.

Mam nadzieję, że to pomaga =)

gmartinsnull
źródło
8

dla sdkversion 25

     androidTestCompile 'com.android.support:support-annotations:25.2.0'
dc10
źródło
3

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

maruti060385
źródło
To wydaje się być naprawdę dobrym sposobem na rozwiązanie takiego problemu. Ponadto spróbuj uruchomić ten wiersz komendowy ./gradlew: app: dependencies w katalogu głównym projektu, utworzy ono drzewo na temat zależności twojego projektu i dokładnie sprawdzi, a następnie dowiesz się, skąd pochodzi konflikt.
Frank Jorsn
2

Po prostu usuń te linie z pliku build.gradle:

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
Shiv om Bhardwaj
źródło
To nie działa w ten sposób. Powoduje to więcej błędów w projekcie
0

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

    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
źródło
0

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ł.

Broń X
źródło