Fehler: Konflikt mit der Abhängigkeit 'com.google.code.findbugs: jsr305'

241

Ich habe ein neues Projekt in Android Studio 2.2 Preview 1 mit Android App und Backend-Modul mit Google Messaging erstellt. Dies ist die App-Datei:

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')
}

Aber es gibt:

Fehler: Konflikt mit der Abhängigkeit 'com.google.code.findbugs: jsr305'. Die aufgelösten Versionen für App (1.3.9) und Test-App (2.0.1) unterscheiden sich. Weitere Informationen finden Sie unter http://g.co/androidstudio/app-test-app-conflict .

Ich bin neu in Android und kann diesen Fehler nicht finden. Wie behebe ich das?

Rahul Garg
quelle

Antworten:

641

Fügen Sie in Ihrer App build.gradleFolgendes hinzu:

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

Erzwingt, dass Gradle nur die von Ihnen angegebene Versionsnummer für alle Abhängigkeiten kompiliert, unabhängig davon, welche Versionsnummer in den Abhängigkeiten angegeben wurde.

gbhall
quelle
57
Es kann nützlich sein, dieses Snippet zu erklären.
Andrew Gallasch
18
@Andy teilt Gradle explizit mit, welche Version kompiliert werden soll (unabhängig von der Versionsnummer, in der die Abhängigkeiten angegeben sind) ... während gleichzeitig v 2.0.1funktioniert, müssen beide Versionen erzwungen werden (unabhängig davon, ob beide Versionen identisch sein müssen).
Martin Zeitler
2
@ MartinZeitler, aber es erklärt nicht wirklich, woher dieses Problem kommt. Ich bekomme heute dieses Problem mit testImplementation 'junit: junit: 4.12' androidTestImplementation 'com.android.support.test: running: 1.0.1' androidTestImplementation 'com.android.support.test.espresso: espresso-core: 3.0.1'
Fralbo
1
Danke vielmals. Das ist auch nach dreieinhalb Jahren noch sehr hilfreich. ;)
Kartik
1
@ Kartik haha ​​jeeze, es ist lange her! Keine Sorge, danke, ich hoffe es hat geholfen! Ich habe die Android-Entwicklung schon lange gestoppt, aber ich bin mir sicher, dass ich sie eines Tages wieder aufnehmen werde 😊
gbhall
170

Dies ist auf Espresso zurückzuführen. Sie können Ihren Apps Folgendes hinzufügen build.grade, um dies zu verringern.

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') {
  exclude group: 'com.google.code.findbugs'
}
Santhosh
quelle
1
Funktioniert nicht. Die als Antwort festgelegte Frage funktioniert.
Warpzit
2
@ Warpzit - Das hat bei mir funktioniert (genau wie die akzeptierte Antwort).
Ted Hopp
@ TedHopp Ich habe tatsächlich etwas anderes gemacht. Ich hatte ein Problem mit gradle compile für youtube api, also habe ich stattdessen das lib jar verwendet.
Warpzit
2
Dies ist höchstwahrscheinlich die Antwort, nach der jeder sucht. In den meisten Fällen nimmt Android Studio Espresso standardmäßig in die Abhängigkeitsliste auf, und Sie müssen einige Dinge ausschließen, um es zusammen mit anderen Bibliotheken verwenden zu können. Abgesehen von dem, was @Santhosh gesagt hat, habe ich auchexclude group: 'com.android.support', module: 'support-annotations'
Milosmns
1
Nun, ich habe gerade androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2') {Gruppe ausschließen: 'com.google.code.findbugs'} entfernt und es hat funktioniert: D weil hauptsächlich das Problem mit Ihr Fix ist, dass einige Leute bereits * androidTestCompile haben ('com.android.support.test.espresso: espresso-core: 2.2.2', {Gruppe ausschließen: 'com.android.support', Modul: 'support-annotations' }) * so etwas in ihrer Gradle-Datei, und das Hinzufügen eines weiteren Ausschlusses löst eine Ausnahme aus, alles Hagel-Gradle-Scripting, immer noch eine positive Bewertung für Sie :)
ShayHaned
31

METHODE 1: Ich habe die androidTestCompile auf Espresso-Core-Linie gelöscht, die automatisch in ein neues Projekt aufgenommen wurde. Dann kompiliert mein Android Studio sauber.

Das androidTestCompile befindet sich in "build.gradle (Module: app)":

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

Ich weiß nicht, ob diese Löschung später Probleme bereiten wird, aber sie funktioniert jetzt sicherlich für mein aktuelles Projekt.

METHODE 2: Das Hinzufügen eines Ausschlusses für Findbugs funktioniert auch:

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'
    })
    ...
}

METHODE 3: Erzwingen des Kompilierens mit einer bestimmten Version:

(Im Folgenden erzwinge ich das Kompilieren mit der höheren Version.)

dependencies {
    ...
    androidTestCompile 'com.google.code.findbugs:jsr305:3.0.0'
    ...
}
Liwen Zhao
quelle
Es gibt ein Versions-Update: androidTestCompile 'com.google.code.findbugs: jsr305: 3.0.1'
Insoft
18

Aus dem Gradle Plugin Benutzerhandbuch :

Wenn Instrumentierungstests ausgeführt werden, teilen sich sowohl die Haupt-APK als auch die Test-APK denselben Klassenpfad. Der Gradle-Build schlägt fehl, wenn das Haupt-APK und das Test-APK dieselbe Bibliothek (z. B. Guava) verwenden, jedoch in unterschiedlichen Versionen. Wenn gradle das nicht bemerkt hat, kann sich Ihre App während Tests und während des normalen Laufs anders verhalten (einschließlich eines Absturzes in einem der Fälle).

Stellen Sie einfach sicher, dass beide APKs dieselbe Version verwenden, damit der Build erfolgreich ist. Wenn es sich bei dem Fehler um eine indirekte Abhängigkeit handelt (eine Bibliothek, die Sie in Ihrem build.gradle nicht erwähnt haben), fügen Sie der Konfiguration einfach eine Abhängigkeit für die neuere Version hinzu

Fügen Sie diese Zeile zu Ihren build.gradle- Abhängigkeiten hinzu, um eine neuere Version für beide APKs zu verwenden:

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

Zum späteren Nachschlagen können Sie Ihre Gradle-Konsole überprüfen. Neben dem Fehler wird ein hilfreicher Link angezeigt, der bei Fehlern bei der Gradle-Erstellung hilft.

lkisac
quelle
8

Der Grund, warum dies passiert, ist, dass die Diff-Abhängigkeit dieselbe Bibliothek der Diff-Version verwendet.
Es gibt also 3 Schritte oder (1 Schritt), um dieses Problem zu lösen.

1

Hinzufügen

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

zu Ihrer build.gradleDatei inandroid {...}

2 ..

Öffnen Sie das Terminal im Android Studio
Run- ./gradlew -q app:dependenciesBefehl.

3 ..

Klicken Sie in Clean Projectder Menüleiste von Android Studio in der BuildListe.
Es wird das Projekt neu erstellen und dann remove im ersten Schritt codiert.

Vielleicht brauchen Sie nur den 2. Schritt auszuführen. Ich kann kein Rollback durchführen, wenn ein Fehler auftritt. Probieren Sie es aus.

ElliotCui
quelle
7

Als ich module: 'jsr305'als zusätzliche Ausschlussanweisung hinzufügte , hat alles gut für mich geklappt.

 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
quelle
6

Das Problem, wie in Ihren Protokollen angegeben, sind zwei Abhängigkeiten, die versuchen, verschiedene Versionen der dritten Abhängigkeit zu verwenden. Fügen Sie der App-Gradle-Datei eine der folgenden Optionen hinzu:

androidTestCompile 'com.google.code.findbugs:jsr305:2.0.1'
androidTestCompile 'com.google.code.findbugs:jsr305:1.3.9'
nbtk
quelle
4
  1. Die akzeptierte Antwort ist eine Möglichkeit, das Problem zu beheben, da nur eine Strategie für die problematische Abhängigkeit (com.google.code.findbugs: jsr305) angewendet wird und das Problem im Projekt mithilfe einer Version dieser Abhängigkeit behoben wird. Grundsätzlich werden die Versionen dieser Bibliothek innerhalb des gesamten Projekts ausgerichtet.

  2. Es gibt eine Antwort von @Santhosh (und einigen anderen Personen), die vorschlägt, dieselbe Abhängigkeit für Espresso auszuschließen, die auf die gleiche Weise funktionieren sollte, aber wenn das Projekt einige andere Abhängigkeiten aufweist, die von derselben Bibliothek abhängen (com.google) .code.findbugs: jsr305), wieder haben wir das gleiche Problem. Um diesen Ansatz verwenden zu können, müssen Sie dieselbe Gruppe von allen Projektabhängigkeiten ausschließen, die von com.google.code.findbugs: jsr305 abhängen. Ich persönlich habe festgestellt, dass Espresso Contrib und Espresso Intents auch com.google.code.findbugs: jsr305 verwenden.

Ich hoffe, diese Gedanken helfen jemandem zu erkennen, was genau hier passiert und wie die Dinge funktionieren (nicht nur kopieren, Code einfügen) :).

Stoycho Andreev
quelle
3

Fügen Sie dies zu Abhängigkeiten hinzu, um die Verwendung der neuesten Version der findbugs-Bibliothek zu erzwingen:

compile 'com.google.code.findbugs:jsr305:2.0.1'
Ayman Al-Absi
quelle
2

Das Löschen von Espresso-Abhängigkeiten in der Gradle-Datei funktioniert bei mir.

Löschen Sie diese Zeilen in der App-Gradle-Datei:

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
Kai Wang
quelle
3
Wenn Sie nur die Espresso-Abhängigkeit löschen, können Sie Ihre App nicht mehr testen, sodass diese Lösung eindeutig nicht funktioniert.
Heinrich
1

Diejenigen, die denselben Fehler in Android 3.0.1 erhalten, können ihn beheben, indem sie einfach die Versionen von compileSdkVersion und targetSdkVersion auf 27 aktualisieren und in Abhängigkeiten auch com.android.support:appcompat-v7:27.1.1 'implementieren .

Arjun
quelle
1

Im Projekt ': app' können Sie Ihrer app / build.gradle-Datei Folgendes hinzufügen:

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

Für React-Native-Firebaseapp/build.gradle funktionierte das Hinzufügen zum Abschnitt "Abhängigkeiten" für mich:

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
quelle
Dies ist das erste Mal, dass ich das Flag {force = true} sehe. Ich habe es versucht und es hat sofort für mich funktioniert. Ich musste androidx.appcompat für mein Projekt auf v1.0.2 halten, da für eine Bibliothek, die ich hinzugefügt habe, diese Abhängigkeit auf v1.1.0 festgelegt ist.
MikeOscarEcho
0

Ich habe versucht, Airbnb-Deeplink-Versand zu verwenden und habe diesen Fehler erhalten. Ich musste auch die Findbugs-Gruppe aus dem AnnotationProcessor ausschließen.

//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
quelle
0

REAKT NATIV

Wenn Sie nach einer reaktiven nativen Lösung suchen, schreiben Sie dieses Snippet in die Gradle-Build-Datei Ihrer betroffenen node_modules, z. B. Firebase in meinem Fall.

android {
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.0'
    }
}
Faisal Hassan
quelle