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ć?

Rahul Garg
źródło

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.

gbhall
źródło
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'
}
Santhosh
źródło
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'
    ...
}
Liwen Zhao
źródło
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.

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

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

})

Wahib Ul Haq
źródło
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'
nbtk
źródło
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) :).

Stoycho Andreev
źródło
3

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

compile 'com.google.code.findbugs:jsr305:2.0.1'
Ayman Al-Absi
źródło
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'
})
Kai Wang
źródło
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 .

Arjun
źródło
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'
 }
 }
Diya Bhat
źródło
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}
Indivision Dev
źródło
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'
    }
j2emanue
źródło
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'
    }
}
Faisal Hassan
źródło