Как мне решить android.арка.жизненный цикл: общие конфликты версий?


Задан проект с таким набором зависимостей:

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"
}

Я получаю следующую ошибку:

Ошибка: конфликт с зависимостью ' android.арка.жизненный цикл: Общий" в проекте": приложение. Разрешенные версии для приложения (1.0.2) и тестового приложения (1.0.0) отличаются. Смотрите http://g.co/androidstudio/app-test-app-conflict для деталей.

Как мне решить эту проблему?

1 3

1 ответ:

Несоответствия зависимостей артефактов являются общей проблемой, и я ожидаю, что это будет частая проблема с компонентами архитектуры, учитывая, что версионирование этих компонентов является византийским1.

В этом случае существует недокументированная Версия 1.0.2 недокументированного android.arch.lifecycle:common артефакта.

android.arch.lifecycle:extensions:1.0.0-beta2 и android.arch.lifecycle:reactivestreams:1.0.0-beta2 зависят от этой недокументированной версии 1.0.2 недокументированного android.arch.lifecycle:common артефакта. Однако соответствующий тестовый артефакт (android.arch.core:core-testing:1.0.0-beta2) зависит от версии 1.0.0 из android.arch.lifecycle:common. В результате мы получаем конфликт.

Обходной путь состоит в том, чтобы вручную запросить 1.0.2 для тестового кода через:

androidTestCompile 'android.arch.lifecycle:common:1.0.2'
Теперь Gradle будет использовать 1.0.2 как для основного кода, так и для тестового кода, и все будет хорошо.

1термин "византийский" используется для описания чего-то излишне сложного. Византийцы могли бы описать сложные вещи фразой "как система управления версиями архитектуры". Компоненты", если бы эти компоненты существовали тогда.