Erreur: conflit avec la dépendance "com.google.code.findbugs: jsr305"

241

J'ai créé un nouveau projet dans Android Studio 2.2 Preview 1 avec l'application Android et le module Backend avec Google Messaging. Voici le fichier d'application:

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

Mais ça donne:

Erreur: conflit avec la dépendance "com.google.code.findbugs: jsr305". Les versions résolues pour l'application (1.3.9) et l'application de test (2.0.1) diffèrent. Voir http://g.co/androidstudio/app-test-app-conflict pour plus de détails.

Je suis nouveau sur Android et je ne trouve pas quelle est cette erreur. Comment je le répare?

Rahul Garg
la source

Réponses:

642

Dans votre application, build.gradleajoutez les éléments suivants:

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

Applique Gradle à compiler uniquement le numéro de version que vous indiquez pour toutes les dépendances, quel que soit le numéro de version indiqué par les dépendances.

gbhall
la source
57
Il pourrait être utile d'expliquer cet extrait.
Andrew Gallasch du
18
@Andy, il indique explicitement à Gradle quelle version doit être compilée (quel que soit le numéro de version de l'état des dépendances) ... tout en appliquant v 2.0.1fonctionne également (peu importe, les deux versions doivent être forcées pour être identiques).
Martin Zeitler
2
@MartinZeitler mais cela n'explique pas vraiment d'où vient ce problème. J'ai aujourd'hui ce problème avec testImplementation 'junit: junit: 4.12' androidTestImplementation 'com.android.support.test: runner: 1.0.1' androidTestImplementation 'com.android.support.test.espresso: expresso-core: 3.0.1'
fralbo
1
Merci beaucoup. C'est vraiment utile encore après 3 ans et demi. ;)
Kartik
1
@Kartik haha ​​jeeze, c'était il y a longtemps! Pas de soucis, merci, j'espère que ça a aidé! J'ai depuis longtemps arrêté le développement Android mais je suis sûr qu'un jour je le reprendrai 😊
gbhall
170

Cela est dû à l'espresso. Vous pouvez ajouter ce qui suit à vos applications build.gradepour atténuer cela.

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') {
  exclude group: 'com.google.code.findbugs'
}
Santhosh
la source
1
Ca ne fonctionne pas. La question définie comme réponse fonctionne.
Warpzit
2
@Warpzit - Cela a fonctionné pour moi (tout comme la réponse acceptée).
Ted Hopp
@TedHopp J'ai fini par faire autre chose. J'ai eu un problème avec gradle compile pour youtube api, j'ai donc fini par utiliser le lib lib.
Warpzit
2
C'est très probablement la réponse que tout le monde cherche. Dans la plupart des cas, Android Studio inclut Espresso par défaut dans la liste des dépendances, et vous devez exclure quelques éléments afin de l'utiliser avec d'autres bibliothèques. En plus de ce que @Santhosh a dit, j'ai aussiexclude group: 'com.android.support', module: 'support-annotations'
milosmns
1
Eh bien, je viens de supprimer androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2') {exclude group: 'com.google.code.findbugs'} et cela a fonctionné: D car principalement le problème avec votre correctif est que certaines personnes ont déjà * androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2', {exclude group: 'com.android.support', module: 'support-annotations' }) * quelque chose comme ça dans leur fichier gradle, et l'ajout d'une autre exclusion lève une exception, tous les scripts de gradle grêle, toujours un vote positif pour vous :)
ShayHaned
31

MÉTHODE 1: J'ai supprimé le androidTestCompile sur la ligne espresso-core qui a été automatiquement inclus dans un nouveau projet. Ensuite, mon Android Studio se compile proprement.

AndroidTestCompile est dans "build.gradle (Module: app)":

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

Je ne sais pas si cette suppression aura un problème sur la route, mais cela fonctionne sûrement pour mon projet actuel maintenant.

MÉTHODE 2: L'ajout d'une exclusion sur findbugs fonctionne également:

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

MÉTHODE 3: Forcer la compilation avec une version spécifique:

(Dans ce qui suit, je la force à compiler avec la version supérieure.)

dependencies {
    ...
    androidTestCompile 'com.google.code.findbugs:jsr305:3.0.0'
    ...
}
Liwen Zhao
la source
il y a une mise à jour de version: androidTestCompile 'com.google.code.findbugs: jsr305: 3.0.1'
Insoft
18

Depuis le guide de l'utilisateur du plugin Gradle :

Lorsque les tests d'instrumentation sont exécutés, l'APK principal et l'APK de test partagent le même chemin de classe. La construction de Gradle échouera si l'APK principal et l'APK de test utilisent la même bibliothèque (par exemple Guava) mais dans des versions différentes. Si gradle n'a pas compris cela, votre application pourrait se comporter différemment pendant les tests et pendant l'exécution normale (y compris le plantage dans l'un des cas).

Pour réussir la génération, assurez-vous simplement que les deux fichiers APK utilisent la même version. Si l'erreur concerne une dépendance indirecte (une bibliothèque que vous n'avez pas mentionnée dans votre build.gradle), ajoutez simplement une dépendance pour la version la plus récente à la configuration

Ajoutez cette ligne à vos dépendances build.gradle pour utiliser une version plus récente pour les deux APK:

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

Pour référence future, vous pouvez vérifier votre console Gradle et elle fournira un lien utile à côté de l'erreur pour vous aider avec toutes les erreurs de construction Gradle.

lkisac
la source
8

La raison pour laquelle cela se produit est que la dépendance diff utilise la même bibliothèque de version diff.
Donc, il y a 3 étapes ou (1 étape) pour résoudre ce problème.

1er

Ajouter

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

dans votre build.gradlefichierandroid {...}

2e

Ouvrez le terminal dans la commande Android Studio
Run ./gradlew -q app:dependencies.

3e

Cliquez Clean Projectdans la barre de menus du studio Android dans la Buildliste.
Il va reconstruire le projet, puis removecoder en 1ère étape.

Peut-être avez-vous juste besoin d'exécuter la 2e étape. Je ne peux pas revenir en arrière en cas d'erreur. Essaye.

ElliotCui
la source
7

Lorsque j'ai ajouté module: 'jsr305'une instruction d'exclusion supplémentaire, tout s'est bien passé pour moi.

 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
la source
6

Le problème, comme indiqué dans vos journaux, est que 2 dépendances essaient d'utiliser différentes versions de la 3e dépendance. Ajoutez l'un des éléments suivants au fichier app-gradle:

androidTestCompile 'com.google.code.findbugs:jsr305:2.0.1'
androidTestCompile 'com.google.code.findbugs:jsr305:1.3.9'
nbtk
la source
4
  1. La réponse acceptée est un moyen de résoudre le problème, car elle appliquera simplement une stratégie pour la dépendance problématique (com.google.code.findbugs: jsr305) et elle résoudra le problème autour du projet, en utilisant une version de cette dépendance. Fondamentalement, il alignera les versions de cette bibliothèque dans l'ensemble du projet.

  2. Il y a une réponse de @Santhosh (et quelques autres personnes) qui suggère d'exclure la même dépendance pour l'expresso, qui devrait fonctionner de la même manière, mais si le projet a d'autres dépendances qui dépendent de la même bibliothèque (com.google .code.findbugs: jsr305), encore une fois, nous aurons le même problème. Donc, pour utiliser cette approche, vous devrez exclure le même groupe de toutes les dépendances du projet, qui dépendent de com.google.code.findbugs: jsr305. J'ai personnellement constaté que Espresso Contrib et Espresso Intents utilisent également com.google.code.findbugs: jsr305.

J'espère que ces pensées aideront quelqu'un à réaliser ce qui se passe exactement ici et comment les choses fonctionnent (pas seulement copier-coller du code) :).

Stoycho Andreev
la source
3

Ajoutez ceci aux dépendances pour forcer l'utilisation de la dernière version de la bibliothèque findbugs:

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

supprimer les dépendances expresso dans le fichier gradle fonctionne pour moi.

supprimez ces lignes dans le fichier de gradation de l'application:

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
Kai Wang
la source
3
Si vous supprimez simplement la dépendance à l'espresso, vous ne pouvez plus tester votre application, de sorte que cette solution ne fonctionne clairement pas.
Heinrich
1

Ceux qui obtiennent la même erreur dans Android 3.0.1, peuvent le résoudre en mettant simplement à jour les versions de compileSdkVersion et targetSdkVersion à 27 et également implémenter com.android.support:appcompat-v7:27.1.1 'dans les dépendances .

Arjun
la source
1

Dans le projet ': app', vous pouvez ajouter ce qui suit à votre fichier app / build.gradle:

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

Pour react-native-firebase , l'ajout de cela à app/build.gradlela section des dépendances l'a fait fonctionner pour moi:

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
la source
C'est la première fois que je vois le drapeau {force = true}. Je l'ai essayé et cela a fonctionné tout de suite pour moi. Je devais garder androidx.appcompat à v1.0.2 pour mon projet car une bibliothèque que j'ai ajoutée a cette dépendance définie sur v1.1.0.
MikeOscarEcho
0

J'essayais d'utiliser la répartition des liens profonds airbnb et j'ai eu cette erreur. J'ai également dû exclure le groupe findbugs du processeur d'annotation.

//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
la source
0

REACT NATIVE

Si vous cherchez une solution native de react, alors écrivez cet extrait dans votre fichier de construction gradle node_modules affecté, par exemple firebase dans mon cas.

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