Компоненты архитектуры 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
, поэтому я просто обновил эту версию до последней, и все заработало.