Błąd: konflikt z zależnością „com.google.code.findbugs: jsr305”


241

Stworzyłem nowy projekt w Android Studio 2.2 Preview 1 z aplikacją na Androida i modułem backend z Google Messaging. To jest plik aplikacji:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    defaultConfig {
        applicationId "com.xxx.xxx"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1'
    compile 'com.google.android.gms:play-services-gcm:9.0.0'
    testCompile 'junit:junit:4.12'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support:support-annotations:23.4.0'
    compile project(path: ':backend', configuration: 'android-endpoints')
}

Ale daje:

Błąd: konflikt z zależnością „com.google.code.findbugs: jsr305”. Rozwiązane wersje aplikacji (1.3.9) i aplikacji testowej (2.0.1) różnią się. Szczegółowe informacje można znaleźć na stronie http://g.co/androidstudio/app-test-app-conflict .

Jestem nowym użytkownikiem Androida i nie mogę znaleźć tego, co oznacza ten błąd. Jak to naprawić?

Odpowiedzi:


642

W swojej aplikacji build.gradledodaj:

android {
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
    }
}

Wymusza na Gradle kompilowanie tylko numeru wersji podanego dla wszystkich zależności, bez względu na numer wersji podany przez te zależności.


57
Przydatne może być wyjaśnienie tego fragmentu.
Andrew Gallasch,

18
@Andy wyraźnie mówi Gradle, którą wersję należy skompilować (bez względu na to, który numer wersji stan zależności) ... jednocześnie wymuszając działanie v 2.0.1(cokolwiek, obie wersje muszą być zmuszone do identyczności).
Martin Zeitler,

2
@MartinZeitler, ale tak naprawdę nie wyjaśnia, skąd bierze się ten problem. Dzisiaj dostaję ten problem z 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'
fralbo

1
Wielkie dzięki. Jest to bardzo pomocne jeszcze po 3 i pół roku. ;)
Kartik

1
@Kartik haha ​​jeeze, to było dawno temu! Nie martw się, dziękuję, mam nadzieję, że to pomogło! Długo przestałem programować Androida, ale na pewno pewnego dnia go ponownie kupię 😊
gbhall

170

Wynika to z espresso. Możesz dodać następujące aplikacje build.gradedo swoich aplikacji, aby to złagodzić.

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') {
  exclude group: 'com.google.code.findbugs'
}

1
Nie działa. Pytanie ustawione jako odpowiedź działa.
Warpzit,

2
@Warpzit - To zadziałało dla mnie (podobnie jak zaakceptowana odpowiedź).
Ted Hopp,

@TedHopp Właściwie skończyło się na zrobieniu czegoś innego. Miałem problem z kompilacją stopni dla interfejsu YouTube, więc zamiast tego użyłem słoika lib.
Warpzit,

2
Jest to najprawdopodobniej odpowiedź, której wszyscy szukają. W większości przypadków Android Studio domyślnie umieszcza Espresso na liście zależności i musisz wykluczyć kilka rzeczy, aby używać go razem z innymi bibliotekami. Oprócz tego, co powiedział @Santhosh, ja takżeexclude group: 'com.android.support', module: 'support-annotations'
milosmns

1
Cóż, właśnie usunąłem androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2') {wyklucz grupę: 'com.google.code.findbugs'} i zadziałało: D, ponieważ głównie problem z twoja poprawka polega na tym, że niektóre osoby mają już * androidTestCompile („com.android.support.test.espresso: espresso-core: 2.2.2”, {wyklucz grupę: „com.android.support”, moduł: „adnotacje pomocnicze” }) * coś takiego w swoim pliku gradle, a dodanie kolejnego wykluczenia rzuca wyjątek, wszystkie skrypty gradowe gradu, wciąż głosuję za tobą :)
ShayHaned 5'18

31

METODA 1: Usunąłem androidTestCompile na linii rdzenia espresso, która została automatycznie uwzględniona w nowym projekcie. Następnie moje Android Studio kompiluje się czysto.

AndroidTestCompile znajduje się w „build.gradle (Module: app)”:

dependencies {
    ...
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    ...
}

Nie wiem, czy to usunięcie będzie miało jakiś problem w przyszłości, ale z pewnością działa teraz w moim obecnym projekcie.

METODA 2: Działa także dodanie wykluczenia w findbugs:

dependencies {
    ...
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
        exclude group: 'com.google.code.findbugs'
    })
    ...
}

METODA 3: Wymuszanie kompilacji z określoną wersją:

(W dalszej kolejności zmuszam ją do kompilacji z wyższą wersją).

dependencies {
    ...
    androidTestCompile 'com.google.code.findbugs:jsr305:3.0.0'
    ...
}

dostępna jest aktualizacja wersji: androidTestCompile 'com.google.code.findbugs: jsr305: 3.0.1'
Insoft

18

Z instrukcji obsługi wtyczki Gradle :

Po uruchomieniu testów oprzyrządowania zarówno główny APK, jak i testowy APK mają tę samą ścieżkę klasy. Kompilacja stopniowa zakończy się niepowodzeniem, jeśli główny APK i testowy APK będą używać tej samej biblioteki (np. Guava), ale w różnych wersjach. Jeśli grad nie wyłapał tego, aplikacja może zachowywać się inaczej podczas testów i podczas normalnego uruchamiania (w tym awarii w jednym z przypadków).

Aby kompilacja się powiodła, upewnij się, że oba pliki APK korzystają z tej samej wersji. Jeśli błąd dotyczy zależności pośredniej (biblioteki, o której nie wspomniałeś w build.gradle), po prostu dodaj zależność dla nowszej wersji do konfiguracji

Dodaj ten wiersz do zależności build.gradle, aby używać nowszej wersji dla obu plików APK:

compile('com.google.code.findbugs:jsr305:2.0.1')

W celu skorzystania z niej w przyszłości możesz sprawdzić konsolę Gradle, a obok błędu pojawi się pomocne łącze, które pomoże w przypadku błędów kompilacji stopni.


8

Powodem tego jest to, że zależność od różnic używa tej samej biblioteki wersji różnic.
Istnieją więc 3 kroki (1 krok), aby rozwiązać ten problem.

1. miejsce

Dodaj

configurations.all {
    resolutionStrategy.force 'com.google.code.findbugs:jsr305:2.0.1'
}

do twojego build.gradlepliku wandroid {...}

2. miejsce

Otwórz Terminal w studio android
wykonywania ./gradlew -q app:dependenciespolecenia.

3. miejsce

Kliknij Clean Projectna pasku menu Android Studio na Buildliście.
Odbuduje projekt, a następnie removekod w pierwszym kroku.

Może potrzebujesz wykonać drugi krok. Nie mogę wycofać, gdy wystąpi błąd. Spróbuj.


7

Kiedy dodałem module: 'jsr305'jako dodatkowe oświadczenie wykluczające, wszystko ułożyło się dla mnie dobrze.

 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
exclude module: 'jsr305'

})


6

Problem, jak stwierdzono w dziennikach, polega na 2 zależnościach próbujących użyć różnych wersji trzeciej zależności. Dodaj jedną z następujących opcji do pliku klasy aplikacji:

androidTestCompile 'com.google.code.findbugs:jsr305:2.0.1'
androidTestCompile 'com.google.code.findbugs:jsr305:1.3.9'

4
  1. Przyjęta odpowiedź jest jednym ze sposobów rozwiązania problemu, ponieważ po prostu zastosuje pewną strategię dla problematycznej zależności (com.google.code.findbugs: jsr305) i rozwiąże problem wokół projektu, wykorzystując pewną wersję tej zależności. Zasadniczo wyrówna wersje tej biblioteki w całym projekcie.

  2. Odpowiedź @Santhosh (i kilku innych osób) sugeruje wykluczenie tej samej zależności dla espresso, która powinna działać w ten sam sposób, ale jeśli w projekcie występują inne zależności zależne od tej samej biblioteki (com.google .code.findbugs: jsr305), znowu będziemy mieli ten sam problem. Aby zastosować to podejście, musisz wykluczyć tę samą grupę ze wszystkich zależności projektu, które zależą od com.google.code.findbugs: jsr305. Osobiście przekonałem się, że Espresso Contrib i Espresso Intents używają również com.google.code.findbugs: jsr305.

Mam nadzieję, że te myśli pomogą komuś zrozumieć, co dokładnie się tutaj dzieje i jak to działa (nie tylko kopiuj, wklej kod) :).


3

Dodaj to do zależności, aby wymusić użycie najnowszej wersji biblioteki findbugs:

compile 'com.google.code.findbugs:jsr305:2.0.1'

2

usuwanie zależności espresso w pliku gradle działa dla mnie.

usuń te wiersze z pliku oceny aplikacji:

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})

3
Jeśli po prostu usuniesz zależność od espresso, nie będziesz już mógł przetestować swojej aplikacji, więc to rozwiązanie wyraźnie nie działa.
Heinrich

1

Ci, którzy są coraz ten sam błąd w Androidzie 3.0.1, można go rozwiązać, po prostu zaktualizować wersje z compileSdkVersion i targetSdkVersion do 27 , a także wdrożenie com.android.support:appcompat-v7:27.1.1' w zależnościach .


1

W projekcie „: aplikacja” możesz dodać następujące elementy do pliku app / build.gradle:

android {
 configurations.all {
    resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
 }
 }

1

W przypadku reakcji-natywna-baza ognia dodanie tego do app/build.gradlesekcji zależności sprawiło, że działało to dla mnie:

implementation('com.squareup.okhttp3:okhttp:3.12.1') { force = true }
implementation('com.squareup.okio:okio:1.15.0') { force = true }
implementation('com.google.code.findbugs:jsr305:3.0.2') { force = true}

Po raz pierwszy widzę flagę {force = true}. Próbowałem i zadziałało to od razu. Musiałem zachować androidx.appcompat w wersji 1.0.2 dla mojego projektu, ponieważ dodana biblioteka ma tę zależność ustawioną na wersję 1.1.0.
MikeOscarEcho

0

Próbowałem użyć wysyłki deeplink airbnb i otrzymałem ten błąd. Musiałem także wykluczyć grupę findbugs z procesora adnotacji.

//airBnb
    compile ('com.airbnb:deeplinkdispatch:3.1.1'){
        exclude group:'com.google.code.findbugs'
    }
    annotationProcessor ('com.airbnb:deeplinkdispatch-processor:3.1.1'){
        exclude group:'com.google.code.findbugs'
    }

0

REACT NATIVE

Jeśli szukasz zareagować na rozwiązanie natywne, napisz ten fragment w pliku kompilacji stopni node_modules, którego dotyczy problem, np. Firebase w moim przypadku.

android {
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.0'
    }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.