Компоненты архитектуры Android: ошибка синхронизации Gradle для версии зависимости

Я пытаюсь добавить ViewModel и LiveData в приложение Kotlin. У меня есть следующие зависимости, добавленные в мой модуль build.gradle:

implementation "android.arch.lifecycle:extensions:1.1.1"
kapt "android.arch.lifecycle:compiler:1.1.1"
testImplementation "android.arch.core:core-testing:1.1.1"

Мне дана следующая ошибка:

Андроида зависимость "android.arch.lifecycle: runtime" имеет другую версию для компиляции (1.0.0) и среды выполнения (1.1.1). Вы должны вручную установить ту же версию через DependencyResolution

Удаление первой строки (extensions) устраняет проблему, указывая на то, что ошибка исходит оттуда, но я не могу понять, почему.

Ответы

Ответ 1

Видимо, support-v4 вызывала конфликт. В случае этого вопроса задача зависимостей Gradle работает некорректно, но для всех, кто сталкивается с этой проблемой:

./gradlew :app:dependencies будут отображать зависимости, используемые вашими зависимостями. Найдите выход этой команды (изменение app для имени вашего модуля) для зависимости, вызывающей конфликт.

Ответ 2

Как отмечает @RedBassett, библиотеки поддержки зависят от этого облегченного импорта (библиотеки времени выполнения), как описано в документации разработчиков Android.

Это, android.arch.lifecycle: runtime: 1.0.0 распространяется в дереве зависимостей в результате внутреннего импорта api (транзитивного), поэтому в моем случае мне нужно было включить библиотеку расширений как "api" вместо " реализации ", чтобы он переместил свою версию на наивысшую (1.1.1).

В заключение, изменение

implementation "android.arch.lifecycle:extensions:1.1.1"

в

api "android.arch.lifecycle:extensions:1.1.1"

Ответ 3

В вашем основном файле build.gradle

allprojects {
    ...

    configurations {
        all {
            resolutionStrategy {
                force "android.arch.lifecycle:runtime:1.1.1"
            }
        }
    }

}

Это обеспечит исполнение версии 1.1.1

Ответ 4

@RedBassett прав. Однако у меня все еще была проблема, исключающая зависимые от него зависимости android.arch.lifecycle.

В моем случае конфликт был вызван в com.android.support:appcompat-v7:27.1.1.

Вот как выглядит моя зависимость от град после исключения.

implementation ('com.android.support:appcompat-v7:27.1.1') {
    exclude group: 'android.arch.lifecycle'
}


api "android.arch.lifecycle:runtime:1.1.1"
kapt "android.arch.persistence.room:compiler:1.1.1"

Кроме того, вам придется добавить это исключение в каждый импортированный модуль.

Ответ 5

Я искал все зависимости с помощью ./gradlew :app:dependencies как упомянул @RedBassett. Я заметил несовместимую версию android.arch.core:runtime которую жаловался Градл, проистекала из моей версии com.android.support:appcompat-v7, поэтому я просто обновил эту версию до последней, и все заработало.