Wszystkie biblioteki com.android.support muszą używać dokładnie tej samej specyfikacji wersji

788

Po aktualizacji do Androida Studio 2.3 otrzymałem ten komunikat o błędzie. Wiem, że to tylko wskazówka, ponieważ aplikacja działa normalnie, ale jest naprawdę dziwna.

Wszystkie biblioteki com.android.support muszą używać dokładnie tej samej specyfikacji wersji (mieszanie wersji może prowadzić do awarii środowiska wykonawczego). Znaleziono wersje 25.1.1, 24.0.0. Przykłady obejmują com.android.support:animated-vector-drawable:25.1.1 i com.android.support:mediarouter-v7:24.0.0

wprowadź opis zdjęcia tutaj

moja ocena:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'

    compile 'com.android.support:appcompat-v7:25.1.1'
    compile 'com.android.support:support-v4:25.1.1'
    compile 'com.android.support:design:25.1.1'
    compile 'com.android.support:recyclerview-v7:25.1.1'
    compile 'com.android.support:cardview-v7:25.1.1'
    compile 'com.google.android.gms:play-services-maps:10.2.0'
    compile 'com.google.android.gms:play-services:10.2.0'

    compile 'io.reactivex.rxjava2:rxjava:2.0.1'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'com.jakewharton:butterknife:8.4.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
    compile 'com.blankj:utilcode:1.3.6'
    compile 'com.orhanobut:logger:1.15'
    compile 'com.facebook.stetho:stetho:1.4.2'

    provided 'com.google.auto.value:auto-value:1.2'
    annotationProcessor 'com.google.auto.value:auto-value:1.2'
    annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.5'

    compile 'com.mikepenz:iconics-core:2.8.2@aar'
    compile('com.mikepenz:materialdrawer:5.8.1@aar') { transitive = true }
    compile 'com.mikepenz:google-material-typeface:2.2.0.3.original@aar'
    compile 'me.zhanghai.android.materialprogressbar:library:1.3.0'
    compile 'com.github.GrenderG:Toasty:1.1.1'
    compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.8.0'
    compile 'com.github.MAXDeliveryNG:slideview:1.0.0'

    compile 'com.facebook.fresco:fresco:1.0.1'
    compile 'com.github.bumptech.glide:glide:3.7.0'

    compile 'com.google.maps.android:android-maps-utils:0.4.4'
    compile 'com.github.jd-alexander:library:1.1.0'
}
humazed
źródło
dodaj to do podprojektów projektuBuild.Gradle {project.configurations.all {resolutionStrategy.eachDependency {details -> if (details.requested.group == 'com.android.support' &&! details.requested.name.contains ('multidex ')) {details.useVersion "26. +"}}}}
Sunil Chaudhary

Odpowiedzi:

906

Możesz to rozwiązać za pomocą jednego z następujących rozwiązań:

Aktualizacja:

Począwszy od Androida Studio 3.0, staje się znacznie łatwiejsze, ponieważ teraz wyświetla bardziej pomocną wskazówkę, więc musimy tylko postępować zgodnie z tą wskazówką.
na przykład: 1]

Wszystkie biblioteki com.android.support muszą używać dokładnie tej samej specyfikacji wersji (mieszanie wersji może prowadzić do awarii środowiska wykonawczego). Znaleziono wersje 27.0.2, 26.1.0. Przykłady obejmują com.android.support:animated-vector-drawable:27.0.2 i com.android.support:customtabs:26.1.0

istnieją pewne kombinacje bibliotek lub narzędzi i bibliotek, które są niezgodne lub mogą prowadzić do błędów. Jedną z takich niezgodności jest kompilacja z wersją bibliotek obsługi Androida, która nie jest najnowszą wersją (lub w szczególności wersją niższą niż twoja docelowa wersja).

Rozwiązanie:
Dodaj jawnie bibliotekę ze starą wersją, ale z nowym numerem wersji.
w moim przypadku com.android.support:customtabs:26.1.0muszę dodać:

implementation "com.android.support:customtabs:27.0.2"  

tj .: Weź bibliotekę z drugiego elementu i zaimplementuj ją z numerem wersji od pierwszego.

Uwaga: nie zapomnij nacisnąć teraz synchronizacji, aby gradle mógł odbudować wykres zależności i sprawdzić, czy są jeszcze jakieś konflikty.

Objaśnienie:
komunikat o błędzie może być zdezorientowany, ponieważ nie używaj, customtabswięc mam konflikt !!
cóż ... nie użyłeś go bezpośrednio, ale jedna z bibliotek używa starej wersji customtabswewnętrznego, więc musisz poprosić o to bezpośrednio.

jeśli chcesz się dowiedzieć, która z bibliotek jest odpowiedzialna za starą wersję i może poprosić autora o aktualizację swojej biblioteki, uruchom raport zależności Gradle, zobacz starą odpowiedź, aby dowiedzieć się, jak to zrobić.

Zauważ to


Stara odpowiedź:

inspirowane odpowiedzią CommonsWare :

Uruchom raport zależności Gradle, aby zobaczyć pełne drzewo zależności.

Stamtąd zobaczysz, która z bibliotek prosi o inną wersję bibliotek obsługi systemu Android. Bez względu na to, o co prosi, możesz poprosić o to bezpośrednio w wersji 25.2.0 lub użyć innych metod rozwiązywania konfliktów Gradle, aby uzyskać te same wersje.


Aktualizacja:

Od wersji wtyczki gradle: 3.0 compilezostał zastąpiony przez implementationlub apizobacz tę odpowiedź dla różnicy.

dlatego użyj zamiast tego:

./gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath

lub dla Windows cmd:

gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath

i wyszukaj wersję będącą w konflikcie.

Dla mnie błąd zniknął po usunięciu com.google.android.gms:play-services:10.2.0

I tylko obejmują com.google.android.gms:play-services-location:10.2.0i com.google.android.gms:play-services-maps:10.2.0ponieważ są to jedyne dwie usługi gry, z których korzystam.

Myślę, że gms:play-serviceszależą od niektórych starych składników biblioteki wsparcia, więc musimy je dodać osobiście.


dla AS 3.0 i starszych.

Biegać:

./gradlew -q dependencies <module-name>:dependencies --configuration implementation

Przykład:

./gradlew -q dependencies app:dependencies --configuration implementation

jeśli ktoś zna lepszy sposób w nowej wtyczce gradle, daj mi znać.

humazed
źródło
3
com.google.android.gms:play-services:10.2.0obsługuje SDK 14 i wyżej, jeśli chcesz używać poniżej SDK 14, musisz użyć wersji, 10.0.1jak wspomniano w stackoverflow.com/a/42315590/6248491
Sneh Pandya
2
@humazed noob question, gdzie mam uruchomić polecenie w Android Studio?
Haikal Nashuha,
1
w terminalu, ale najpierw spróbuj wypróbować usługi związane z
grami
1
Czy jestem jedynym, który uważa, że ​​to szaleństwo? Chcę tylko admob i facebook, a oni nie chcą ze sobą współpracować ....
Jay
3
Pomocne może być wskazanie, że examples includetekst w komunikacie o błędzie pokazuje rzeczywiste przykłady z twojego projektu, a nie niejasne ogólne przykłady rodzaju problemu. Weź bibliotekę z drugiego elementu i zaimplementuj ją z numerem wersji od pierwszego.
Benjamin Kershner,
203
  1. Przejdź do project/.idea/librariesfolderu w systemie plików i sprawdź, które biblioteki są inne.
  2. Będziesz musiał ręcznie dołączyć te biblioteki z tą samą wersją do swojego build.gradlepliku.
  3. Następnie zsynchronizuj swój projekt.

Na przykład:

compile 'com.android.support:appcompat-v7:25.2.0'

// Wrong library version found on 1st point
compile 'com.android.support:customtabs:25.2.0'
João Paulo Paiva
źródło
Słuszna uwaga. Nigdy nie myślałem o sprawdzeniu, który z nich był niewłaściwy. : S Dzięki!
Tobias Reich,
działa, gdy nie działa automatyczna metoda oceniania, dzięki
Odaym,
10
w / Project Files / My project / .idea / libraries znajduje się wiele plików pomocniczych w różnych wersjach. Skąd mam wiedzieć, który moduł lub zależność używa tego?
Satpal Yadav
2
@SatpalYadav Szukałem wersji niezgodnej z najnowszą dostępną (używam w mojej aplikacji). Np. Używam wsparcia: projekt: 25.3.1, ale okna dialogowe materiałów używają wsparcia-v13: 25.1.1. Więc dodałem support-v13: 25.3.1 i błąd znika.
hardysim
1
To jak dotąd najlepsze rozwiązanie dla mnie, ale jak mogę zastąpić nowsze biblioteki?
Mateusz Kaflowski
149

We wszystkich przypadkach, nie tylko dla tych wersji lub bibliotek:

Zwróć uwagę na małe okno informacyjne, które mówi coś o błędzie, zawiera przykłady, które musisz zmienić i dodać .

W tym przypadku:

Znaleziono wersje 25.1.1, 24.0.0. Przykłady obejmują com.android.support:animated-vector-drawable:25.1.1 i com.android.support:mediarouter-v7:24.0.0

Twój

com.android.support:animated-vector-drawable:25.1.1

jest wersja 25.1.1 i twoja

com.android.support:mediarouter-v7:24.0.0

jest wersja 24.0.0 , więc musisz dodać mediarouter z tą samą wersją:

com.android.support:mediarouter-v7:25.1.1

I zrób to dla każdego przykładu, który mówi małe okno informacyjne, w tym przypadku wszystkich bibliotek, które nie mają wersji 25.1.1.

Musisz zsynchronizować grad po naprawieniu wskazanej biblioteki, aby zobaczyć następną bibliotekę i pakiet, który musisz zmienić.

WAŻNY:

Jeśli nie używasz jednoznacznie jednej lub więcej określonych bibliotek i pojawia się błąd, oznacza to, że jest używana wewnętrznie przez inną bibliotekę, i tak skompiluj ją jawnie.

Możesz także użyć innej metody, aby zobaczyć różnicę wersji wszystkich bibliotek, które faktycznie kompilujesz (np. Uruchom raport zależności lub przejdź do plików bibliotek), prawdziwym celem jest skompilowanie wszystkich bibliotek, których używasz ta sama wersja .

Brandon Zamudio
źródło
1
dzięki tonie, czy możesz wyjaśnić, co support:mediarouterdokładnie robi?
mrid
1
Myślę, że jest to coś, na co zwróciłeś uwagę, że większość z nas przeoczyła. I tzn. „Zwróć uwagę na małe okno informacyjne, które mówi coś o błędzie ....”. Dziękuję, dzięki temu lepiej rozumiem, co się naprawdę dzieje.
Yo Apps,
103

Najlepszym sposobem rozwiązania tego problemu jest wdrożenie wszystkich „com.android.support: ...” sugerowanych przez Android Studio

(Nie ma znaczenia, z których wersji wsparcia korzystasz - 27.1.1, 28.0.0 itp.)

Ustaw kursor na linii błędu, np

implementation 'com.android.support:appcompat-v7:28.0.0'

Android Studio zasugeruje, która „com.android.support: ...” jest inną wersją niż „com.android.support:appcompat-v7:28.0.0”

Przykład

Wszystkie biblioteki com.android.support muszą używać dokładnie tej samej specyfikacji wersji (mieszanie wersji może prowadzić do awarii środowiska wykonawczego). Znaleziono wersje 28.0.0, 27.1.0, 27.0.2. Przykłady obejmują com.android.support:animated-vector-drawable:28.0.0 i com.android.support:exifinterface:27.1.0

Więc dodaj com.android.support:animated-vector-drawable:28.0.0 & com.android.support:exifinterface:28.0.0. Teraz zsynchronizuj plik stopni.

Jedna po drugiej spróbuj zaimplementować wszystkie sugerowane „com.android.support: ...”, dopóki w tym wierszu nie wystąpi błąd implementation 'com.android.support:appcompat-v7:28.0.0'

W moim przypadku dodałem

implementation 'com.android.support:appcompat-v7:28.0.0'

implementation 'com.android.support:animated-vector-drawable:28.0.0'
implementation 'com.android.support:exifinterface:28.0.0'
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.android.support:customtabs:28.0.0'
implementation 'com.android.support:support-media-compat:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'

Wszystkie te zależności mogą być dla Ciebie inne.

Adarsh ​​Vijayan P.
źródło
ręcznie dodałem zarówno „wdrożenie” com.android.support:animated-vector-drawable:28.0.0 ”i„ wdrożenie ”com.android.support:support-media-compat:28.0.0” ”, ale„ wdrożenie ” com.android.support:appcompat-v7:28.0.0 '”jest nadal podkreślony na czerwono
AAEM
@AAEM, jeśli umieścisz kursor w linii błędu, pokaże jakie są zależności, które powinieneś dodać w następnej kolejności. Dodaj wszystkie zależności do tej samej wersji i zsynchronizuj plik stopni. Jeśli ponownie wyświetli się komunikat o błędzie, wykonaj kolejne czynności, dopóki nie wystąpi błąd.
Adarsh ​​Vijayan P
100

Dodaj to na samym końcu swojego build.gradle (moduł: aplikacja):

configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    def requested = details.requested
    if (requested.group == 'com.android.support') {
        if (!requested.name.startsWith("multidex")) {
            details.useVersion '25.3.1'
        }
     }

   }
}

Upewnij się, że zamieniłeś '25 .3.1 'na wersję biblioteki wsparcia Androida, której chcesz używać dla wszystkich zależności, nie powinna być niższa niż twoja kompatybilna wersja sdk

niż ponownie zsynchronizować stopień

ezzou
źródło
3
Właśnie tego potrzebowałem, jedna z moich zależności w jakiś sposób pobierała 27.0.1, nawet gdy podałem gorszą wersję na najwyższym poziomie. Z ciekawości, dlaczego wykluczasz „multidex”?
ray
4
To uratowało mi dzień. Ale ten rozwój Androida staje się coraz bardziej rozdrobniony z każdą chwilą. Ludzie muszą naprawdę dokładnie sprawdzić każdą bibliotekę wsparcia przed jej wdrożeniem. Nie zawsze mamy czas na zapoznanie się z każdą nową wersją pomocy technicznej, ponieważ chcemy skupić się na tworzeniu naszych produktów, a nie na tym wszystkim. To zawsze frustrujące
Larrytech
1
@ThinkTwiceCodeOnce Możesz przejść tutaj, aby dowiedzieć się więcej o groovy i jego wtyczkach inteliji: jetbrains.com/help/idea/getting-started-with-groovy.html
ezzou
1
Jesteś człowiekiem ratującym życie. Należy to wielokrotnie oceniać!
imin
1
to powinno być rozwiązanie ... przegłosowane
Ast
54

Miałem dokładnie ten sam problem po aktualizacji do Androida Studio 2.3

Dodanie tej linii do zależności rozwiązało mój problem:

compile 'com.android.support:customtabs:25.2.0'
Berat Baran Cevik
źródło
2
Miałem dokładnie ten sam problem po aktualizacji do Androida Studio 2.3
Plugie
1
Dla każdego, kto używa RenderScript, ustawiłem renderscriptSupportModeEnabled falsena false. Dodano kompilację 'com.android.support:customtabs:25.2.0'i błąd zniknął.
Prawo Gimenez
1
@LawGimenez A jak powinniśmy użyć renderscript, jeśli właśnie go wyłączyliśmy?
dor506
3
wygląda na to, że mój problem wynika również z renderscript, ale co jeśli potrzebuję renderscript do czegoś innego, a nie do customtabs?
HendraWD,
46

A) Uruchom gradle dependencieslub./gradlew dependencies

B) Spójrz na swoje drzewo i dowiedz się, która z twoich zależności określa inną wersję biblioteki wsparcia dla zależności, której nie kontrolujesz.

Nie zdawałem sobie sprawy, że to ostrzeżenie wyświetla się również, jeśli zależność nie jest całkowicie wykorzystywana bezpośrednio przez własny kod. W moim przypadku Facebook określa niektóre biblioteki wsparcia, których nie używałem. Poniżej widać, że większość tych zależności została zastąpiona przez moją własną specyfikację 25.2.0, oznaczoną symbolami -> XXX (*) . Widok karty i niestandardowe biblioteki zakładek nie zostały przez nikogo przesłonięte, więc sam muszę poprosić o wydanie 25.2.0, nawet jeśli ich nie używam.

+--- com.facebook.android:facebook-android-sdk:4.17.0
|    +--- com.android.support:support-v4:25.0.0 -> 25.2.0 (*)
|    +--- com.android.support:appcompat-v7:25.0.0 -> 25.2.0 (*)
|    +--- com.android.support:cardview-v7:25.0.0
|    |    \--- com.android.support:support-annotations:25.0.0 -> 25.2.0
|    +--- com.android.support:customtabs:25.0.0
|    |    +--- com.android.support:support-compat:25.0.0 -> 25.2.0 (*)
|    |    \--- com.android.support:support-annotations:25.0.0 -> 25.2.0
|    \--- com.parse.bolts:bolts-android:1.4.0 (*)

Jeśli grad już cię ostrzegł i podał przykłady ...

Przykłady obejmują com.android.support:animated-vector-drawable:25.1.1 i com.android.support:mediarouter-v7:24.0.0

... jest jeszcze łatwiej, jeśli dodasz wyróżnienie grep dla niższej wersji, ponieważ gradle dependenciesmoże być dość szczegółowe:

./gradlew dependencies | grep --color -E 'com.android.support:mediarouter-v7|$'
Daniel Wilson
źródło
1
Z wyjaśnieniem Rozumiem, że XXX -> YYY (*) oznacza, że XXX jest zastępowany przez YYY, że dobrze jest wiedzieć
Merkury
Dosłownie jedyna poprawna odpowiedź.
stef
32

Użyj zmiennych : Wykonanie czegoś takiego, jak poniżej, ułatwi ci korzystanie z tej samej wersji we wszystkich bibliotekach

dependencies {

    ext {
        support_library_version = '25.2.0'
        google_play_services_version = '10.2.0'
    }

    //#####################################################################
    //          Support Library
    //#####################################################################
    compile "com.android.support:appcompat-v7:${support_library_version}"
    compile "com.android.support:palette-v7:${support_library_version}"
    compile "com.android.support:design:${support_library_version}"

    //#####################################################################
    //          Google Play Services
    //#####################################################################
    compile "com.google.android.gms:play-services-auth:${google_play_services_version}"
    compile "com.google.android.gms:play-services-ads:${google_play_services_version}"
    compile "com.google.android.gms:play-services-analytics:${google_play_services_version}"

    //#####################################################################
    //          Firebase
    //#####################################################################
    compile "com.google.firebase:firebase-core:${google_play_services_version}"
    compile "com.google.firebase:firebase-auth:${google_play_services_version}"
    compile "com.google.firebase:firebase-messaging:${google_play_services_version}"

Więcej informacji o tym, jak Google sugeruje obsługę tej wersji, można znaleźć w tym artykule: https://developer.android.com/studio/build/index.html#top-level

Daniel F.
źródło
dzięki Drogi Danielu F. Myślę, że to najlepszy sposób na uniknięcie problemu z mieszaniem wersji.
Hovanes Mosoyan
2
Tylko jedna uwaga: ponownie, jak sugerujemy w powyższym linku, powinniśmy ponownie zdefiniować zmienne tego typu w PLIKU GRADLE NA GÓRZE POZIOMU)
Hovanes Mosoyan
25

po prostu dodaj to:

compile 'com.android.support:mediarouter-v7:25.2.0'

Updated dla nowych wersji SDK

compile 'com.android.support:mediarouter-v7:28.0.0-alpha3'
Mohsen mokhtari
źródło
Nie rozwiązuje problemu, że stara biblioteka zawiera stary zestaw SDK.
CoolMind,
19

Jeśli ten sam błąd jest włączony appcompat

implementation 'com.android.support:appcompat-v7:27.0.1'

następnie dodanie designrozwiązało to.

implementation 'com.android.support:appcompat-v7:27.0.1'
implementation 'com.android.support:design:27.0.1'

Dla mnie dodawanie

implementation 'de.mrmaffen:vlc-android-sdk:2.0.6'

obejmował appcompat-v7:23.1.1w

.idea / biblioteki

bez vlc, appcompatsam wystarczy.

Kraby
źródło
Wielkie dzięki, zadziałało, ale jaka jest rola „com.android.support:design:27.0.1”
Wessam El Mahdy
19

Jak już widzieliście wszystkie odpowiedzi i komentarze powyżej, ta odpowiedź ma na celu usunięcie czegoś, czego nowy programista może nie uzyskać łatwo.

./gradlew -q aplikacja zależności: zależności - kompilacja konfiguracji

Powyższa linia uratuje Ci życie bez wątpienia, ale jak uzyskać dokładny punkt z wyniku powyższej linii.

Gdy otrzymasz powyższą tabelę lub listę wszystkich zależności z powyższego polecenia, musisz przeszukać sprzeczny numer wersji, który otrzymujesz w kodzie. zobacz poniższy obrazek.

wprowadź opis zdjęcia tutaj

na powyższym obrazku widać, że problem 23.4.0 stwarza problem, ale nie możemy tego znaleźć w naszym pliku ocen. Więc teraz ten numer wersji (23.4.0) nas uratuje. Kiedy otrzymamy ten numer, znajdziemy go w wyniku powyższego wyniku polecenia i bezpośrednio zaimportujemy tę zależność bezpośrednio w naszym pliku ocen. Zobacz poniższy obraz, aby uzyskać wyraźny widok.

widać wyraźnie, że com.android.support:cardview-v7:23.4.0 i com.android.support:customtabs:23.4.0 używają wersji, która powoduje problem. Teraz wystarczy skopiować te linie z listy zależności i jawnie użyć ich w naszym pliku gradle, ale z linkiem do zaktualizowanej wersji

implementacja „com.android.support:cardview-v7:26.1.0” implementacja „com.android.support:customtabs:26.1.0”

anoopbryan2
źródło
1
Dziękuję Ci! W nowszych wersjach Androida studio powinno zostać przełączone na implementację zamiast kompilacji
Avi Parshan
Tak, masz rację @AviParshan możemy użyć kompilacji lub interfejsu API. Zależności pojawiające się w konfiguracjach interfejsu API zostaną tranzytowo udostępnione konsumentom biblioteki i jako takie pojawią się w ścieżce kompilacji konsumentów. Z drugiej strony zależności znalezione w konfiguracji implementacji nie będą narażone na konsumentów, a zatem nie wyciekną w ścieżkę klas kompilacji konsumentów.
anoopbryan2
użyj aplikacji ./gradlew -q dependencies: zależności - wdrożenie konfiguracji
Sumit
15

Innym sposobem rozwiązywania konfliktów jest po prostu wymuszenie poprawnej wersji dla wszystkich zależności, takich jak to:

dependencies {
            configurations.all {
                resolutionStrategy.eachDependency { DependencyResolveDetails details ->
                    if (details.requested.group == 'com.android.support' && details.requested.name == 'support-v4') {
                        details.useVersion "27.0.2"
                    }
                }
    ...
    }

https://docs.gradle.org/current/userguide/customizing_dependency_resolution_behavior.html

Zysk
źródło
Reguły rozwiązywania zależności są trudne do utrzymania. Muszą być utrzymywane ręcznie dla numeru wersji i każdej zmiany w zaimplementowanych bibliotekach wsparcia. Na przykład Android Studio podkreśla dostępne nowsze wersje lib, ale nie interpretuje tych reguł.
Manuel
12

Użyj support-v13 zamiast support-v4

compile 'com.android.support:support-v13:25.2.0'
Mehmet Hanoğlu
źródło
Mam problem z tym: kompiluj 'com.android.support:recyclerview-v7:25.2.0'
Crime_Master_GoGo
Dokładnie taki sam błąd jak powyżej: -> wszystkie biblioteki com.android.support muszą używać dokładnie tej samej specyfikacji wersji Recyclerview
Crime_Master_GoGo
@ Googli, proszę napisać compileSdkVersion , buildToolsVersion i zależności, których użyłem. Nie ma problemucompile 'com.android.support:appcompat-v7:25.2.0' compile 'com.android.support:design:25.2.0' compile 'com.android.support:support-v13:25.2.0' compile 'com.android.support:recyclerview-v7:25.2.0'
Mehmet Hanoğlu
12

dodaj je w zależnościach na poziomie aplikacji

implementation 'com.android.support:asynclayoutinflater:28.0.0'
implementation 'com.android.support:exifinterface:28.0.0'
implementation 'com.android.support:animated-vector-drawable:28.0.0'
implementation 'com.android.support:support-media-compat:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
Mohammad Maaz
źródło
9

Mój problem jest podobny do twojego. Oto błąd!

compile 'com.android.support:appcompat-v7:25.3.0'

Wszystkie biblioteki com.android.support muszą używać dokładnie tej samej specyfikacji wersji (mieszanie wersji może prowadzić do awarii środowiska wykonawczego). Znaleziono wersje 25.3.0, 24.0.0. Przykłady obejmują „com.android.support:animated-vector-drawable:25.3.0” i „com.android.support:mediarouter-v7:24.0.0”

Przykłady obejmują: „com.android.support:animated-vector-drawable:25.3.0” i „com.android.support:mediarouter-v7:24.0.0”

po prostu dodaj te kody w zależnościach, upewnij się, że wersje są takie same.

compile 'com.android.support:animated-vector-drawable:25.3.0'
compile 'com.android.support:mediarouter-v7:25.3.0'
Yanbin Hu
źródło
9

Ten sam błąd wystąpił po dodaniu compile 'com.google.android.gms:play-services:10.2.4'z kompilacją 'com.android.support:appcompat-v7:25.3.1'.

Dodanie animated-vector-drawablei mediarouter libsnaprawienie problemu.

compile 'com.google.android.gms:play-services:10.2.4'
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:animated-vector-drawable:25.3.1'
compile 'com.android.support:mediarouter-v7:25.3.1'
Sandeep
źródło
9

Miałem to:

dependencies {
   implementation fileTree(dir: 'libs', include: ['*.jar'])
   implementation 'com.android.support:appcompat-v7:27.1.1'
   implementation 'com.android.support:design:27.1.1'
   implementation 'com.android.support:support-v4:27.1.1'
   implementation 'com.google.firebase:firebase-auth:12.0.1'
   implementation 'com.google.firebase:firebase-firestore:12.0.1'
   implementation 'com.google.firebase:firebase-messaging:12.0.1'
   implementation 'com.google.android.gms:play-services-auth:12.0.1'
   implementation'com.facebook.android:facebook-login:[4,5)'
   implementation 'com.twitter.sdk.android:twitter:3.1.1'
   implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'
   implementation 'org.jetbrains:annotations-java5:15.0'
   implementation project(':vehiclesapi')
   testImplementation 'junit:junit:4.12'
   androidTestImplementation 'com.android.support.test:runner:1.0.1'
   androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

i dostałem ten błąd: wprowadź opis zdjęcia tutaj

Rozwiązania były proste - wszystkie podstawowe zależności były prawidłowe, więc pozostawia - wszelkie zależności stron trzecich. Usuwano jeden po drugim, aż znalazłem winowajcę, i okazało się, że jest na Facebooku! używa wersji 27.0.2 bibliotek obsługi Androida. Próbowałem dodać wersję 27.1.1 Cardview, ale to też nie zadziałało, a rozwiązanie nadal było dość proste.

dependencies {
   implementation fileTree(dir: 'libs', include: ['*.jar'])
   implementation 'com.android.support:appcompat-v7:27.1.1'
   implementation 'com.android.support:design:27.1.1'
   implementation 'com.android.support:support-v4:27.1.1'
   implementation 'com.google.firebase:firebase-auth:12.0.1'
   implementation 'com.google.firebase:firebase-firestore:12.0.1'
   implementation 'com.google.firebase:firebase-messaging:12.0.1'
   implementation 'com.google.android.gms:play-services-auth:12.0.1'
   implementation('com.facebook.android:facebook-login:[4,5)'){
       // contains com.android.support:v7:27.0.2, included required com.android.support.*:27.1.1 modules
    exclude group: 'com.android.support'
   }
   implementation 'com.android.support:cardview-v7:27.1.1' // to replace facebook sdk's cardview-v7:27.0.2.
   implementation 'com.twitter.sdk.android:twitter:3.1.1'
   implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'
   implementation 'org.jetbrains:annotations-java5:15.0'
   implementation project(':vehiclesapi')
   testImplementation 'junit:junit:4.12'
   androidTestImplementation 'com.android.support.test:runner:1.0.1'
   androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
Sagar Patel
źródło
9

Napotkałem ten problem po aktualizacji do Androida Studio 3.4 i wersji SDK do 28.0.0. Zastosowanie poniższej zależności rozwiązało dla mnie problem.

    implementation 'com.android.support:exifinterface:28.0.0'
Shaon
źródło
8

Użyłem tych dwóch, aby rozwiązać problem po aktualizacji do Androida Studio 2.3

compile 'com.android.support:animated-vector-drawable:25.0.0'
compile 'com.android.support:mediarouter-v7:25.0.0'
Aparajita Sinha
źródło
8

Miałem wcześniej ten sam problem i znalazłem rozwiązanie.

Właśnie dodałem biblioteki, które miały inną wersję, ale z tą samą wersją support:appcompat.

Na przykład twój błąd:

Wszystkie biblioteki com.android.support muszą używać dokładnie tej samej specyfikacji wersji (mieszanie wersji może prowadzić do awarii środowiska wykonawczego). Znaleziono wersje 25.1.1, 24.0.0. Przykłady obejmują com.android.support:animated-vector-drawable:25.1.1 i com.android.support:mediarouter-v7:24.0.0

* Rozwiązaniem jest takie skompilowanie wersji tych bibliotek:

compile 'com.android.support:mediarouter-v7:25.1.1'

- jeśli inna biblioteka miała ten sam problem i inna wersja po prostu go skompilowała z twoją support:appcompatwersją

To rozwiązało mój problem i mam nadzieję, że rozwiąże twój.

Wszystkiego najlepszego :)

Hesham Morsy
źródło
8

Po wyszukaniu i połączeniu odpowiedzi, to pytanie w wersji 2018 zadziałało dla mnie:

1) Na karcie nawigacji zmień go na widok projektu

2) Przejdź do [YourProjectName] /. Idea / libraries /

3) Usuń wszystkie pliki zaczynające się od Gradle__com_android_support_ [nazwa_biblioteki]

Np .: Gradle__com_android_support_animated_vector_drawable_26_0_0.xml

4) W pliku ocen zdefiniuj zmienną i użyj jej do zastąpienia numeru wersji, np. $ { ZmiennaNazwa }

Zmienna Def:

ext {
    support_library_version = '28.0.0' //use the version of choice
}

Użyj zmiennej:

implementation "com.android.support:cardview-v7:${support_library_version}"

przykładowa klasa:

dependencies {
    ext {
        support_library_version = '28.0.0' //use the version of choice
    }

    implementation fileTree(include: ['*.jar'], dir: 'libs')

    implementation "com.android.support:animated-vector-drawable:${support_library_version}"
    implementation "com.android.support:appcompat-v7:${support_library_version}"
    implementation "com.android.support:customtabs:${support_library_version}"
    implementation "com.android.support:cardview-v7:${support_library_version}"
    implementation "com.android.support:support-compat:${support_library_version}"
    implementation "com.android.support:support-v4:${support_library_version}"
    implementation "com.android.support:support-core-utils:${support_library_version}"
    implementation "com.android.support:support-core-ui:${support_library_version}"
    implementation "com.android.support:support-fragment:${support_library_version}"
    implementation "com.android.support:support-media-compat:${support_library_version}"
    implementation "com.android.support:appcompat-v7:${support_library_version}"
    implementation "com.android.support:recyclerview-v7:${support_library_version}"
    implementation "com.android.support:design:${support_library_version}"

}
Ali Karaca
źródło
1
Ta odpowiedź wymaga więcej wyjaśnień. Czytelnik może być przekonany, że powinien skopiować i wkleić cały plik ocen do swojego projektu. Powinieneś wyjaśnić, dlaczego dodałeś rozszerzenie i dlaczego ustawiłeś niektóre biblioteki wsparcia dla wersji gplaysvcs, inne dla wersji supportlib, a niektóre pozostały niezmienione.
Jungledev
8

Bardzo proste dzięki nowej wersji Androida Studio 3.x.

Po prostu skopiuj wersję, która jest mniejsza niż bieżąca wersja i dodaj ją jawnie z tym samym numerem wersji co bieżąca wersja.

Przykład

Znaleziono wersje 27.1.1, 27.1.0. Przykłady obejmują com.android.support:animated-vector-drawable:27.1.1 i com.android.support:exifinterface:27.1.0

Po prostu skopiuj wersję com.android.support:exifinterface:27.1.0i zmień ją com.android.support:exifinterface:27.1.1tak, aby stała się równa bieżącej wersji, której używasz, i dodaj ją do zależności między stopniami w następujący sposób.

implementation 'com.android.support:exifinterface:27.1.1'

Uwaga: gdy skończysz, nie zapomnij kliknąć Synchronizuj teraz u góry edytora.

Mahomet
źródło
7

w aktualizacji 2018 dla tego błędu dodaj implementację ze struktury projektu

implementation 'com.android.support:support-v13:28.0.0'

w trybie projektu -> Biblioteki zewnętrzne tam możesz znaleźć swój problem, w moim przypadku używam wersji 28 i bibliotek zewnętrznych, które znalazłem com.android.support:support-media-compat-26.0.0i tutaj był błąd.

po wdrożeniu support v13i działa

Zawsze Bijoy
źródło
Czerwone podkreślenie zniknęło wraz z tą implementacją.
Truong Hieu,
6

Zdefiniowano inną zależność do kompilacji z wersją 24.0.0zamiast 25.1.1. Proszę ustawić wszystkie wersje zależności tak samo jak 25.1.1.

Sneh Pandya
źródło
Zaktualizowałem swoją odpowiedź, wszystkie wersje wsparcia mają tę samą wersję 25.1.1
humazed
6

Musiałem dodać następujące wiersze w gradiencie, aby usunąć błąd

compile 'com.android.support:animated-vector-drawable:25.2.0'
compile 'com.android.support:preference-v7:25.2.0'
compile 'com.android.support:customtabs:25.2.0'
compile 'com.android.support:cardview-v7:25.2.0'
Shrikant
źródło
6

Uruchomiłem zadania ./gradlew - wszystkie i sprawdziłem zależności, które były inne niż wersja docelowa (25.3.1). Otrzymasz coś takiego:

app:prepareComAndroidSupportAnimatedVectorDrawable2531Library - Prepare com.android.support:animated-vector-drawable:25.3.1
app:prepareComAndroidSupportAppcompatV72531Library - Prepare com.android.support:appcompat-v7:25.3.1
app:prepareComAndroidSupportCardviewV72531Library - Prepare com.android.support:cardview-v7:25.3.1
app:prepareComAndroidSupportCustomtabs2531Library - Prepare com.android.support:customtabs:25.3.1
app:prepareComAndroidSupportDesign2531Library - Prepare com.android.support:design:25.3.1
app:prepareComAndroidSupportMediarouterV72531Library - Prepare com.android.support:mediarouter-v7:25.3.1
app:prepareComAndroidSupportPaletteV72531Library - Prepare com.android.support:palette-v7:25.3.1
app:prepareComAndroidSupportRecyclerviewV72531Library - Prepare com.android.support:recyclerview-v7:25.3.1
app:prepareComAndroidSupportSupportCompat2531Library - Prepare com.android.support:support-compat:25.3.1
app:prepareComAndroidSupportSupportCoreUi2531Library - Prepare com.android.support:support-core-ui:25.3.1
app:prepareComAndroidSupportSupportCoreUtils2531Library - Prepare com.android.support:support-core-utils:25.3.1
app:prepareComAndroidSupportSupportFragment2531Library - Prepare com.android.support:support-fragment:25.3.1
app:prepareComAndroidSupportSupportMediaCompat2531Library - Prepare com.android.support:support-media-compat:25.3.1
app:prepareComAndroidSupportSupportV42531Library - Prepare com.android.support:support-v4:25.3.1
app:prepareComAndroidSupportSupportVectorDrawable2531Library - Prepare com.android.support:support-vector-drawable:25.3.1
app:prepareComAndroidSupportTransition2531Library - Prepare com.android.support:transition:25.3.1
app:prepareComAndroidVolleyVolley100Library - Prepare com.android.volley:volley:1.0.0
app:prepareComCrashlyticsSdkAndroidAnswers1312Library - Prepare com.crashlytics.sdk.android:answers:1.3.12
app:prepareComCrashlyticsSdkAndroidBeta124Library - Prepare com.crashlytics.sdk.android:beta:1.2.4
app:prepareComCrashlyticsSdkAndroidCrashlytics267Library - Prepare com.crashlytics.sdk.android:crashlytics:2.6.7
app:prepareComCrashlyticsSdkAndroidCrashlyticsCore2316Library - Prepare com.crashlytics.sdk.android:crashlytics-core:2.3.16
app:prepareComFacebookAndroidFacebookAndroidSdk4161Library - Prepare com.facebook.android:facebook-android-sdk:4.16.1
app:prepareComGoogleAndroidGmsPlayServicesAnalytics1026Library - Prepare com.google.android.gms:play-services-analytics:10.2.6
app:prepareComGoogleAndroidGmsPlayServicesAnalyticsImpl1026Library - Prepare com.google.android.gms:play-services-analytics-impl:10.2.6
app:prepareComGoogleAndroidGmsPlayServicesAuth1026Library - Prepare com.google.android.gms:play-services-auth:10.2.6
app:prepareComGoogleAndroidGmsPlayServicesAuthBase1026Library - Prepare com.google.android.gms:play-services-auth-base:10.2.6
app:prepareComGoogleAndroidGmsPlayServicesBase1026Library - Prepare com.google.android.gms:play-services-base:10.2.6
app:prepareComGoogleAndroidGmsPlayServicesBasement1026Library - Prepare com.google.android.gms:play-services-basement:10.2.6
app:prepareComGoogleAndroidGmsPlayServicesCast1026Library - Prepare com.google.android.gms:play-services-cast:10.2.6
app:prepareComGoogleAndroidGmsPlayServicesLocation1026Library - Prepare com.google.android.gms:play-services-location:10.2.6
app:prepareComGoogleAndroidGmsPlayServicesMaps1026Library - Prepare com.google.android.gms:play-services-maps:10.2.6
app:prepareComGoogleAndroidGmsPlayServicesTagmanagerV4Impl1026Library - Prepare com.google.android.gms:play-services-tagmanager-v4-impl:10.2.6
app:prepareComGoogleAndroidGmsPlayServicesTasks1026Library - Prepare com.google.android.gms:play-services-tasks:10.2.6
app:prepareComGoogleFirebaseFirebaseAnalytics1026Library - Prepare com.google.firebase:firebase-analytics:10.2.6
app:prepareComGoogleFirebaseFirebaseAnalyticsImpl1026Library - Prepare com.google.firebase:firebase-analytics-impl:10.2.6
app:prepareComGoogleFirebaseFirebaseAppindexing1024Library - Prepare com.google.firebase:firebase-appindexing:10.2.4
app:prepareComGoogleFirebaseFirebaseCommon1026Library - Prepare com.google.firebase:firebase-common:10.2.6
app:prepareComGoogleFirebaseFirebaseCore1026Library - Prepare com.google.firebase:firebase-core:10.2.6
app:prepareComGoogleFirebaseFirebaseIid1026Library - Prepare com.google.firebase:firebase-iid:10.2.6
app:prepareComGoogleFirebaseFirebaseMessaging1026Library - Prepare com.google.firebase:firebase-messaging:10.2.6
app:prepareComMindorksPlaceholderview027Library - Prepare com.mindorks:placeholderview:0.2.7
app:prepareDebugAndroidTestDependencies
app:prepareDebugDependencies
app:prepareDebugUnitTestDependencies
app:prepareInfoHoang8fAndroidSegmented105Library - Prepare info.hoang8f:android-segmented:1.0.5
app:prepareIoFabricSdkAndroidFabric1316Library - Prepare io.fabric.sdk.android:fabric:1.3.16
app:prepareNoNordicsemiAndroidLog211Library - Prepare no.nordicsemi.android:log:2.1.1
app:prepareNoNordicsemiAndroidSupportV18Scanner100Library - Prepare no.nordicsemi.android.support.v18:scanner:1.0.0

W tym przypadku celowałem w 25.3.1 i miałem pewne zależności dotyczące różnych wersji, kiedy uruchomiłem to polecenie. Sztuką jest zidentyfikowanie zależności na tej liście, które są kierowane na poprzednie wersje, i przesłonięcie ich poprzez zaimportowanie najnowszej wersji zależności w Gradle.

Matt W.
źródło
6

Mam ten sam problem, ale rozwiązałem ten problem, dodając te trzy linie

implementation 'com.android.support:design:27.1.1'
implementation "com.android.support:customtabs:27.1.1"
implementation 'com.android.support:mediarouter-v7:27.1.1'

teraz wszystko działa idealnie

Hamza Rahman
źródło
6

Oto mój sposób na naprawienie tego ostrzeżenia

build.gradle

android {
    compileSdkVersion ... // must same version (ex: 26)
    ...
}

dependencies {
    ...
    compile 'any com.android.support... library'  // must same version (ex: 26.0.1)
    compile 'any com.android.support... library'  // must same version (ex: 26.0.1)

    ...
    compile ('a library B which don't use 'com.android.support...' OR use SAME version of 'com.android.support'){
         // do nothing 
    }

    ...
    compile ('a library C which use DIFFERENT 'com.android.support...' (ex:27.0.1) { 
        // By default, if use don't do anything here your app will choose the higher com.android.support... for whole project (in this case it is 27.0.1)

        // If you want to use 26.0.1 use
        exclude group: 'com.android.support', module: '...' (ex module: 'appcompat-v7') 
        exclude group: 'com.android.support', module: 'another module'
        ...

        // If you want to use 27.0.1 do 
        Upgrade `compileSdkVersion` and all 'com.android.support' to 27.0.1.
        (It may be a good solution because the best practice is always use latest `compileSdkVersion`.  
        However, use 26 or 27 is base on you for example higher library may have bug)
    }
}

Aby wyświetlić / zweryfikować dependenciescałą bibliotekę w aplikacji
Otwórz terminal i uruchom./gradlew app:dependencies

Aby wyświetlić dependencieskonkretną bibliotekę w aplikacji, wykonaj samouczek tutaj: - Jak wykluczyć zależności określonej zależności w programie Gradle

Mam nadzieję, że to pomoże

Phan Van Linh
źródło
5

Otwórz bibliotekę zewnętrzną swojego projektu, a zobaczysz, że niektóre biblioteki nadal używają poprzedniej wersji, chociaż nie wspomniałeś o tych bibliotekach, więc moja sugestia to po prostu użycie konkretnej wersji biblioteki dla tych, które rozwiążą twój problem.

Subho
źródło
5

Właśnie aktualizuję moje repozytorium obsługi Androida do (wersja: 44.0.0); następnie narzędzia Android SDK i emulator do najnowszej wersji 25.3.1 z sdk manager> narzędzia SDK I to rozwiązało mój problem.

Ajit Thapa
źródło