2017-10-10 9 views
2

donne un projet avec cet ensemble de dépendances:Comment puis-je résoudre android.arch.lifecycle: Conflits de version courants?

dependencies { 
    compile "com.android.support:recyclerview-v7:26.1.0" 
    compile "com.android.support:support-core-utils:26.1.0" 
    compile "com.android.support:support-fragment:26.1.0" 
    compile 'io.reactivex.rxjava2:rxjava:2.1.3' 
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1' 
    compile 'android.arch.lifecycle:runtime:1.0.0' 
    compile 'android.arch.lifecycle:extensions:1.0.0-beta2' 
    compile 'android.arch.lifecycle:reactivestreams:1.0.0-beta2' 
    compile "android.arch.persistence.room:runtime:1.0.0-beta2" 
    compile "android.arch.persistence.room:rxjava2:1.0.0-beta2" 
    annotationProcessor "android.arch.persistence.room:compiler:1.0.0-beta2" 
    androidTestCompile "com.android.support:support-annotations:26.1.0" 
    androidTestCompile 'com.android.support.test:rules:0.5' 
    androidTestCompile 'android.arch.core:core-testing:1.0.0-beta2' 
    androidTestCompile "com.android.support:support-core-utils:26.1.0" 
    androidTestCompile "com.android.support:support-compat:26.1.0" 
} 

Je reçois l'erreur suivante:

Error:Conflict with dependency 'android.arch.lifecycle:common' in project ':app'. Resolved versions for app (1.0.2) and test app (1.0.0) differ. See http://g.co/androidstudio/app-test-app-conflict for details.

Comment puis-je résoudre ce problème?

Répondre

2

Les incohérences de dépendance d'artefact sont un problème courant, et je m'attends à ce que cela soit un problème fréquent avec les composants d'architecture, étant donné que le versionnement de ces composants est byzantin . Dans ce cas, il existe une version non documentée 1.0.2 de l'artefact non documenté android.arch.lifecycle:common.

android.arch.lifecycle:extensions:1.0.0-beta2 et android.arch.lifecycle:reactivestreams:1.0.0-beta2 dépendent de cette version non documentée 1.0.2 de l'artefact android.arch.lifecycle:common sans papier. Cependant, l'artefact de test correspondant (android.arch.core:core-testing:1.0.0-beta2) dépend de la version 1.0.0 de android.arch.lifecycle:common. En conséquence, nous avons le conflit.

La solution consiste à demander manuellement 1.0.2 pour le code de test, via:

androidTestCompile 'android.arch.lifecycle:common:1.0.2' 

Gradle va maintenant utiliser 1.0.2 tant pour le code principal et le code de test, et tout va bien.


The term "byzantine" est utilisé pour décrire quelque chose qui est inutilement complexe. The Byzantines aurait pu décrire des choses complexes avec l'expression "comme le système de gestion de version des composants d'architecture", si ces composants existaient à l'époque.