Test APK Dependency Conflicts

Em uma aplicação antiga que fui atualizar a versão das dependências do gradle, ao executar recebi a seguinte mensagem a respeito de um conflito entre a versão da dependência com.google.code.findbugs:jsr305 para app e para test:

Error:FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ‘:app:preMyAppDebugAndroidTestBuild’. > Conflict with dependency ‘com.google.code.findbugs:jsr305’ in project ‘:app’. Resolved versions for app (1.3.9) and test app (2.0.1) differ. See https://d.android.com/r/tools/test-apk-dependency-conflicts.html for details. * Try: Run with –stacktrace option to get the stack trace. Run with –info or –debug option to get more log output. Run with –scan to get full insights. * Get more help athttps://help.gradle.org BUILD FAILED in 0s

Segue abaixo minha lista de dependências:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.github.PhilJay:MPAndroidChart:v2.2.4'
    compile 'com.android.support:appcompat-v7:27.1.0'
    annotationProcessor 'com.jakewharton:butterknife:7.0.1'
    compile 'com.jakewharton:butterknife:7.0.1'
    compile 'com.google.code.gson:gson:2.8.2'
    compile 'com.google.guava:guava:23.3-android'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.squareup.okhttp:okhttp:'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.7.5'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.google.code.gson:gson:2.8.2'
    compile 'com.squareup.dagger:dagger:1.2.5'
    compile 'com.android.support:design:27.1.0'
    compile 'com.google.zxing:core:3.2.0'
    compile 'com.google.zxing:android-core:3.2.0'
    compile 'com.google.zxing:android-integration:3.2.0'
    compile 'commons-codec:commons-codec:1.5'
    annotationProcessor 'com.squareup.dagger:dagger-compiler:1.2.5'
    provided 'com.squareup.dagger:dagger-compiler:1.2.5'
    androidTestCompile 'org.mockito:mockito-core:'
    androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'
    androidTestCompile 'com.android.support:support-annotations:27.1.0'
    androidTestCompile 'com.android.support.test:runner:1.0.1'
    androidTestCompile 'com.android.support.test:rules:1.0.1'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:3.0.1'
    androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2'){
        exclude module: 'support-annotations'
        exclude module: 'support-v4'
        exclude module: 'support-v13'
        exclude module: 'recyclerview-v7'
    }
    androidTestCompile 'com.android.support.test.espresso:espresso-intents:3.0.1'
}

Como deve-se proceder?

O que está acontecendo é que duas ou mais dependências estão dependendo dessa biblioteca com.google.code.findbugs:jsr305, mas em versões diferentes. Com isso, está ocorrendo esse conflito.

Forçar uma única versão

A primeira solução é forçar que o gradle compile apenas o número da versão que você declara para todas as dependências, não importando qual número de versão as dependências em si tenham declarado. Isso pode ser feito direto no arquivo build.gradle:

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

Nesse exemplo, estamos forçando a versão 1.3.9.

Descobrir em quais dependências está o conflito

Outra solução é avaliar toda sua árvore de dependencias e identificar quais dependências estão dependendo essa mesma biblioteca findbugs e realizar excludenas incompatíveis.

Para isso, podemos usar o comando para listar toda nossas árvores de dependências:

./gradlew app:dependencies

Ou mesmo podemos pesquisar por um dependência em específico como compiletestCompileou androidTestCompile:

./gradlew :app:dependencyInsight --configuration compile --dependency <name>
./gradlew :app:dependencyInsight --configuration testCompile --dependency <name>
./gradlew :app:dependencyInsight --configuration androidTestCompile --dependency <name>

No caso:

./gradlew :app:dependencyInsight --configuration compile --dependency com.google.code.findbugs:jsr305
./gradlew :app:dependencyInsight --configuration testCompile --dependency com.google.code.findbugs:jsr305
./gradlew :app:dependencyInsight --configuration androidTestCompile --dependency com.google.code.findbugs:jsr305

Mediante a lista de dependências especificadas, o problema está na biblioteca com.google.guava:guava:23.3-android, sendo assim, concluimos com o seguinte exclude:

compile ('com.google.guava:guava:23.3-android') {
   exclude group: 'com.google.code.findbugs'
}

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s