Предупреждение «Версия плагина Kotlin не совпадает с версией библиотеки» (хотя они одинаковые)
Причина предупреждения: скрытые транзитивные зависимости
Ваше предупреждение возникает из-за того, что некоторые библиотеки (например, androidx.core:core-ktx:1.12.0) приносят с собой свою версию Kotlin stdlib как транзитивную зависимость. Даже если вы явно указали kotlin-stdlib:1.9.0, Gradle может подтянуть другую версию из-за конфликта или приоритета зависимостей.
Решение: принудительное разрешение версий
Самый надёжный способ — явно указать Gradle, какую версию Kotlin stdlib использовать, переопределив все транзитивные версии. Добавьте в ваш app/build.gradle.kts блок configurations.all:
// app/build.gradle.kts
configurations.all {
resolutionStrategy {
force("org.jetbrains.kotlin:kotlin-stdlib:1.9.0")
force("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0")
force("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0")
force("org.jetbrains.kotlin:kotlin-reflect:1.9.0")
}
}
Это заставит Gradle использовать версию 1.9.0 для всех артефактов Kotlin, независимо от того, что просят библиотеки.
Альтернатива: проверка дерева зависимостей
Выполните в терминале команду, чтобы увидеть, какие версии Kotlin подтягиваются на самом деле:
./gradlew :app:dependencies --configuration debugRuntimeClasspath | grep kotlin
В выводе вы увидите что-то вроде:
org.jetbrains.kotlin:kotlin-stdlib:1.8.10 -> 1.9.0
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10 -> 1.9.0
Стрелка означает, что Gradle уже разрешил конфликт в пользу 1.9.0, но предупреждение всё равно может появляться из-за того, что плагин и библиотека проверяются на разных этапах сборки.
Если предупреждение остаётся
- Обновите Android Studio — в старых версиях мог быть баг с ложными предупреждениями.
- Проверьте версию плагина Kotlin в Android Studio:
File → Settings → Languages & Frameworks → Kotlin. Убедитесь, что она совпадает с версией в Gradle (1.9.0). - Очистите кеш:
Build → Clean Project, затемFile → Invalidate Caches and Restart.
Профилактика на будущее
Чтобы избежать таких проблем, используйте BOM (Bill of Materials) для Kotlin, если ваш проект это поддерживает. Например, с Kotlin 1.9.0+ и Android Gradle Plugin 8.1+ можно сделать так:
// project/build.gradle.kts
plugins {
id("com.android.application") version "8.1.2" apply false
id("org.jetbrains.kotlin.android") version "1.9.0" apply false
id("org.jetbrains.kotlin.plugin.compose") version "1.9.0" apply false // если используете Compose
}
И в app/build.gradle.kts просто не указывайте kotlin-stdlib явно — плагин сам подставит нужную версию. Но это работает только если все библиотеки в проекте совместимы с этой версией.
Упрощённое решение: удалите явную зависимость kotlin-stdlib
Чаще всего предупреждение возникает, потому что вы вручную добавляете implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.0") в dependencies. Плагин Kotlin для Gradle (org.jetbrains.kotlin.android) автоматически добавляет stdlib нужной версии во время компиляции. Явное указание может создать дублирование или конфликт.
Попробуйте просто удалить эту строку из app/build.gradle.kts:
dependencies {
// Удалите эту строку:
// implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.0")
implementation("androidx.core:core-ktx:1.12.0")
// ... остальные зависимости
}
После этого сделайте синхронизацию Gradle (File → Sync Project with Gradle Files). В большинстве случаев предупреждение исчезает, потому что плагин сам управляет версией stdlib, и она гарантированно совпадает с версией плагина.
Когда это не работает
Если предупреждение остаётся, значит одна из ваших библиотек (например, androidx.core:core-ktx) тянет старую версию stdlib через транзитивные зависимости. В этом случае используйте метод force() из первого ответа или обновите все библиотеки до последних версий, совместимых с Kotlin 1.9.0.