Erro: conflito com a dependência 'com.google.code.findbugs: jsr305'

241

Criei um novo projeto no Android Studio 2.2 Preview 1 com o aplicativo Android e o módulo Back-end com o Google Messaging. Este é o arquivo do aplicativo:

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

Mas está dando:

Erro: conflito com a dependência 'com.google.code.findbugs: jsr305'. As versões resolvidas para o aplicativo (1.3.9) e o aplicativo de teste (2.0.1) são diferentes. Consulte http://g.co/androidstudio/app-test-app-conflict para obter detalhes.

Eu sou novo no Android e não consigo encontrar o que é esse erro. Como faço para corrigir isso?

Rahul Garg
fonte

Respostas:

641

Nos aplicativos, build.gradleadicione o seguinte:

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

Força o Gradle a compilar apenas o número da versão que você declara para todas as dependências, independentemente do número da versão declarada pelas dependências.

gbhall
fonte
57
Pode ser útil explicar esse trecho.
Andrew Gallasch
18
@Andy diz explicitamente a Gradle qual versão deve ser compilada (independentemente do número da versão que as dependências declaram) ... enquanto aplica v também 2.0.1funciona (seja como for, ambas as versões precisam ser forçadas a serem idênticas).
Martin Zeitler 28/08
2
@MartinZeitler, mas na verdade não explica de onde vem esse problema. Hoje recebo esse problema com 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 6/0318
1
Muito obrigado. Isso é realmente útil ainda depois de 3 anos e meio. ;)
Kartik
1
@ Kartik haha ​​jeeze, foi há muito tempo! Não se preocupe, obrigado, espero que tenha ajudado! Há muito tempo parado desenvolvimento do Android, mas eu tenho certeza que um dia eu vou pegá-lo novamente 😊
gbhall
170

Isto é devido ao café expresso. Você pode adicionar o seguinte aos seus aplicativos build.gradepara atenuar isso.

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') {
  exclude group: 'com.google.code.findbugs'
}
Santhosh
fonte
1
Não está funcionando. A pergunta que está definida como resposta funciona.
Warpzit
2
@ Warpzit - Isso funcionou para mim (assim como a resposta aceita).
Ted Hopp
@TedHopp Na verdade, acabei fazendo outra coisa. Eu tive um problema com a compilação do gradle para a API do youtube, então acabei usando o jar da lib.
Warpzit 15/03/19
2
Essa é provavelmente a resposta que todos estão procurando. Na maioria dos casos, o Android Studio inclui o Espresso por padrão na lista de dependências e é necessário excluir algumas coisas para usá-lo ao lado de outras bibliotecas. Além do que @Santhosh disse, eu tambémexclude group: 'com.android.support', module: 'support-annotations'
milosmns
1
Bem, acabei de remover androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2') {excluir grupo: 'com.google.code.findbugs'} e funcionou: D porque o problema principal era sua correção é que algumas pessoas já possuem * androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2', {excluir grupo: 'com.android.support', módulo: 'support-notes' }) * algo como isto em seu arquivo Gradle, e adicionando outra excluir é lançar uma exceção, todos os scripts granizo Gradle, ainda um upvote para você :)
ShayHaned
31

MÉTODO 1: Excluí o androidTestCompile na linha de café expresso, que foi automaticamente incluída em um novo projeto. Então meu Android Studio compila limpo.

O androidTestCompile está em "build.gradle (Module: app)":

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

Não sei se essa exclusão terá algum problema no futuro, mas certamente funciona para o meu projeto atual agora.

MÉTODO 2: A adição de uma exclusão em findbugs também 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: Forçando a compilação com uma versão específica:

(A seguir, forço-o a compilar com a versão superior.)

dependencies {
    ...
    androidTestCompile 'com.google.code.findbugs:jsr305:3.0.0'
    ...
}
Liwen Zhao
fonte
há uma atualização de versão: androidTestCompile 'com.google.code.findbugs: jsr305: 3.0.1'
Insoft
18

No Guia do usuário do Gradle Plugin :

Quando os testes de instrumentação são executados, o APK principal e o APK de teste compartilham o mesmo caminho de classe. A construção do Gradle falhará se o APK principal e o APK de teste usarem a mesma biblioteca (por exemplo, Goiaba), mas em versões diferentes. Se a gradle não entender isso, seu aplicativo poderá se comportar de maneira diferente durante os testes e durante a execução normal (incluindo falhas em um dos casos).

Para que a compilação seja bem-sucedida, verifique se os dois APKs usam a mesma versão. Se o erro for sobre uma dependência indireta (uma biblioteca que você não mencionou em seu build.gradle), adicione uma dependência para a versão mais recente à configuração

Adicione esta linha às suas dependências build.gradle para usar a versão mais recente dos dois APKs:

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

Para referência futura, você pode verificar o seu Gradle Console e ele fornecerá um link útil ao lado do erro para ajudar com qualquer erro de construção do gradle.

lkisac
fonte
8

A razão pela qual isso acontece é que a dependência diff usa a mesma lib da versão diff.
Portanto, existem 3 etapas ou (1 etapa) para resolver esse problema.

Adicionar

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

para o seu build.gradlearquivoandroid {...}

Abra o terminal no comando android studio
run ./gradlew -q app:dependencies.

Clique Clean Projectna barra de menus do android studio na Buildlista.
Ele reconstruirá o projeto e removecodificará na 1ª etapa.

Talvez você precise apenas do segundo passo executivo. Não consigo reverter quando ocorre um erro. Tente.

ElliotCui
fonte
7

Quando adicionei module: 'jsr305'como uma declaração de exclusão adicional, tudo funcionou bem para mim.

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

O problema, conforme declarado em seus logs, são 2 dependências tentando usar versões diferentes da 3ª dependência. Adicione um dos seguintes ao arquivo app-gradle:

androidTestCompile 'com.google.code.findbugs:jsr305:2.0.1'
androidTestCompile 'com.google.code.findbugs:jsr305:1.3.9'
nbtk
fonte
4
  1. A resposta aceita é uma maneira de corrigir o problema, porque apenas aplicará alguma estratégia para a dependência problemática (com.google.code.findbugs: jsr305) e resolverá o problema no projeto, usando alguma versão dessa dependência. Basicamente, alinhará as versões desta biblioteca dentro de todo o projeto.

  2. Há uma resposta de @Santhosh (e de outras pessoas) que sugere excluir a mesma dependência para o café expresso, que deve funcionar da mesma maneira, mas se o projeto tiver outras dependências que dependem da mesma biblioteca (com.google .code.findbugs: jsr305), novamente teremos o mesmo problema. Portanto, para usar essa abordagem, você precisará excluir o mesmo grupo de todas as dependências do projeto, que dependem de com.google.code.findbugs: jsr305. Pessoalmente, descobri que o Espresso Contrib e o Espresso Intents também usam com.google.code.findbugs: jsr305.

Espero que esses pensamentos ajudem alguém a perceber o que exatamente está acontecendo aqui e como as coisas funcionam (e não apenas copiar e colar algum código) :).

Stoycho Andreev
fonte
3

Adicione isto às dependências para forçar o uso da versão mais recente da biblioteca findbugs:

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

excluir dependências de café expresso no arquivo gradle funciona para mim.

exclua essas linhas no arquivo gradle do aplicativo:

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
Kai Wang
fonte
3
Se você acabou de excluir a dependência do café expresso, não poderá mais testar seu aplicativo, portanto esta solução claramente não está funcionando.
Heinrich
1

Aqueles que estão recebendo o mesmo erro no Android 3.0.1, podem resolvê-lo simplesmente atualizando as versões do compileSdkVersion e targetSdkVersion para 27 e também Implementar com.android.support:appcompat-v7:27.1.1 'nas dependências .

Arjun
fonte
1

No projeto ': app', você pode adicionar o seguinte ao seu arquivo app / build.gradle:

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

Para react-native-firebase , adicionar isso à app/build.gradleseção dependências fez funcionar para mim:

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
fonte
É a primeira vez que vejo o sinalizador {force = true}. Eu tentei e funcionou imediatamente para mim. Eu precisava manter androidx.appcompat na v1.0.2 para o meu projeto porque uma biblioteca que eu adicionei tem essa dependência definida como v1.1.0.
MikeOscarEcho
0

Eu estava tentando usar o envio de deeplink do airbnb e recebi esse erro. Eu também tive que excluir o grupo findbugs do 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
fonte
0

REATIVO NATIVO

Se você estiver procurando por uma solução nativa de reação, escreva esse trecho no arquivo de construção do node_modules gradle afetado, por exemplo, firebase no meu caso.

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