Error: conflicto con la dependencia 'com.google.code.findbugs: jsr305'

241

Creé un nuevo proyecto en Android Studio 2.2 Preview 1 con la aplicación de Android y el módulo Backend con Google Messaging. Este es el archivo de la aplicación:

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

Pero está dando:

Error: conflicto con la dependencia 'com.google.code.findbugs: jsr305'. Las versiones resueltas para la aplicación (1.3.9) y la aplicación de prueba (2.0.1) difieren. Ver http://g.co/androidstudio/app-test-app-conflict para más detalles.

Soy nuevo en Android y no puedo encontrar cuál es este error. ¿Cómo lo soluciono?

Rahul Garg
fuente

Respuestas:

641

En su aplicación, build.gradleagregue lo siguiente:

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

Hace que Gradle solo compile el número de versión que establezca para todas las dependencias, sin importar qué número de versión hayan indicado las dependencias.

gbhall
fuente
57
Puede ser útil explicar este fragmento.
Andrew Gallasch
18
@Andy explícitamente le dice a Gradle qué versión se compilará (no importa qué número de versión indiquen las dependencias) ... mientras que hacer cumplir v también 2.0.1funciona (lo que sea, ambas versiones deben ser forzadas a ser idénticas).
Martin Zeitler
2
@MartinZeitler pero en realidad no explica de dónde viene este problema. Hoy tengo este problema con 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
Gracias una tonelada. Esto es realmente útil aún después de 3 años y medio. ;)
Kartik
1
@Kartik jaja jeeze, ¡fue hace mucho tiempo! No se preocupe, gracias, ¡espero que haya ayudado! He dejado de largo desarrollo de Android, pero estoy seguro de que algún día voy a recogerlo de nuevo 😊
gbhall
170

Esto se debe al espresso. Puede agregar lo siguiente a sus aplicaciones build.gradepara mitigar esto.

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') {
  exclude group: 'com.google.code.findbugs'
}
Santhosh
fuente
1
No funciona. La pregunta que se establece como respuesta funciona.
Warpzit
2
@Warpzit: esto funcionó para mí (al igual que la respuesta aceptada).
Ted Hopp
@TedHopp En realidad terminé haciendo otra cosa. Tuve un problema con la compilación de gradle para la API de YouTube, así que terminé usando el lib jar en su lugar.
Warpzit
2
Esta es probablemente la respuesta que todos buscan. En la mayoría de los casos, Android Studio incluye Espresso de forma predeterminada en la lista de dependencias, y debe excluir un par de cosas para poder usarlo junto con otras bibliotecas. Además de lo que dijo @Santhosh, yo tambiénexclude group: 'com.android.support', module: 'support-annotations'
milosmns
1
Bueno, acabo de eliminar androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2') {excluir grupo: 'com.google.code.findbugs'} y funcionó: D porque principalmente el problema con su solución es que algunas personas ya tienen * androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2', {excluir grupo: 'com.android.support', módulo: 'support-annotations' }) * algo como esto en su archivo gradle, y agregar otra exclusión arroja una excepción, todas las secuencias de comandos gradle granizo, sigue siendo un voto a favor para usted :)
ShayHaned
31

MÉTODO 1: eliminé androidTestCompile en la línea espresso-core que se incluyó automáticamente en un nuevo proyecto. Entonces mi Android Studio compila limpio.

AndroidTestCompile está en "build.gradle (Módulo: aplicación)":

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

No sé si esta eliminación tendrá algún problema en el futuro, pero seguramente ahora funciona para mi proyecto actual.

MÉTODO 2: Agregar una exclusión en findbugs también funciona:

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ÉTODO 3: Forzar la compilación con una versión específica:

(A continuación, lo fuerzo a compilar con la versión superior).

dependencies {
    ...
    androidTestCompile 'com.google.code.findbugs:jsr305:3.0.0'
    ...
}
Liwen Zhao
fuente
hay una actualización de versión: androidTestCompile 'com.google.code.findbugs: jsr305: 3.0.1'
Insoft
18

De la Guía del usuario de Gradle Plugin :

Cuando se ejecutan las pruebas de instrumentación, tanto el APK principal como el APK de prueba comparten el mismo classpath. La construcción de Gradle fallará si el APK principal y el APK de prueba usan la misma biblioteca (por ejemplo, Guava) pero en versiones diferentes. Si Gradle no entendió eso, su aplicación podría comportarse de manera diferente durante las pruebas y durante la ejecución normal (incluido el bloqueo en uno de los casos).

Para que la compilación tenga éxito, solo asegúrese de que ambos APK utilicen la misma versión. Si el error se trata de una dependencia indirecta (una biblioteca que no mencionó en su build.gradle), simplemente agregue una dependencia para la versión más nueva a la configuración

Agregue esta línea a sus dependencias build.gradle para usar una versión más nueva para ambos APK:

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

Para referencia futura, puede consultar su Consola Gradle y le proporcionará un enlace útil junto al error para ayudarlo con cualquier error de construcción de Gradle.

lkisac
fuente
8

La razón por la que esto sucede es que la dependencia de diff usa la misma lib de la versión de diff.
Entonces, hay 3 pasos o (1 paso) para resolver este problema.

Primero

Añadir

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

a su build.gradlearchivo enandroid {...}

2do

Abrir terminal en Android Studio
Run./gradlew -q app:dependencies comando de .

3ro

Haga clic Clean Projecten la barra de menú de Android Studio en la Buildlista.
Reconstruirá el proyecto y luego removecodificará en el primer paso.

Tal vez solo necesites un segundo paso ejecutivo. No puedo retroceder cuando se produce un error. Pruebalo.

ElliotCui
fuente
7

Cuando agregué module: 'jsr305'como una declaración de exclusión adicional, todo funcionó bien para mí.

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

El problema, como se indica en sus registros, son 2 dependencias que intentan usar diferentes versiones de la tercera dependencia. Agregue uno de los siguientes al archivo app-gradle:

androidTestCompile 'com.google.code.findbugs:jsr305:2.0.1'
androidTestCompile 'com.google.code.findbugs:jsr305:1.3.9'
nbtk
fuente
4
  1. La respuesta aceptada es una forma de solucionar el problema, ya que solo aplicará alguna estrategia para la dependencia problemática (com.google.code.findbugs: jsr305) y resolverá el problema en torno al proyecto, utilizando alguna versión de esta dependencia. Básicamente alineará las versiones de esta biblioteca dentro de todo el proyecto.

  2. Hay una respuesta de @Santhosh (y un par de otras personas) que sugiere excluir la misma dependencia para el espresso, que debería funcionar de la misma manera, pero si el proyecto tiene algunas otras dependencias que dependen de la misma biblioteca (com.google .code.findbugs: jsr305), nuevamente tendremos el mismo problema. Entonces, para usar este enfoque, deberá excluir el mismo grupo de todas las dependencias del proyecto, que dependen de com.google.code.findbugs: jsr305. Personalmente, descubrí que Espresso Contrib y Espresso Intents también usan com.google.code.findbugs: jsr305.

Espero que estos pensamientos ayuden a alguien a darse cuenta de lo que está sucediendo exactamente aquí y cómo funcionan las cosas (no solo copiar y pegar algún código) :).

Stoycho Andreev
fuente
3

Agregue esto a las dependencias para forzar el uso de la última versión de la biblioteca findbugs:

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

Eliminar dependencias de espresso en el archivo Gradle me funciona.

eliminar esas líneas en el archivo gradle de la aplicación:

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
Kai Wang
fuente
3
Si solo elimina la dependencia del espresso, ya no podrá probar su aplicación, por lo que esta solución claramente no funciona.
Heinrich
1

Aquellos que obtienen el mismo error en Android 3.0.1, pueden resolverlo simplemente actualizando las versiones de compileSdkVersion y targetSdkVersion a 27 y también Implemente com.android.support:appcompat-v7:27.1.1 'en dependencias .

Arjun
fuente
1

En el proyecto ': aplicación' puede agregar lo siguiente a su archivo app / build.gradle:

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

Para react-native-firebase , agregar esto a app/build.gradlela sección de dependencias lo hizo funcionar para mí:

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
fuente
Esta es la primera vez que veo la bandera {force = true}. Lo probé y funcionó de inmediato para mí. Necesitaba mantener androidx.appcompat en v1.0.2 para mi proyecto porque una biblioteca que agregué tiene esa dependencia establecida en v1.1.0.
MikeOscarEcho
0

Estaba tratando de usar el despacho de enlace profundo de airbnb y obtuve este error. También tuve que excluir el grupo findbugs del AnnotationProcessor.

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

REACT NATIVO

Si está buscando una solución nativa de reacción, escriba este fragmento en el archivo de compilación gradle node_modules afectado, por ejemplo, firebase en mi caso.

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