Avatar ·

Предупреждение "Версия плагина Kotlin не совпадает с версией библиотеки" (хотя они одинаковые)

Привет всем! Я новичок в Android-разработке на Kotlin. У меня возникла странная проблема. Я пытаюсь обновить версию Kotlin в своём проекте до 1.9.0. Я изменил версию в файле `build.gradle.kts` (на уровне проекта) следующим образом: ```kotlin plugins { id("org.jetbrains.kotlin.android") version "1.9.0" apply false } ``` И в файле `build.gradle.kts` (на уровне модуля `app`): ```kotlin plugins { id("com.android.application") id("org.jetbrains.kotlin.android") } android { compileSdk = 34 ... } ``` Но когда я синхронизирую проект, Android Studio показывает предупреждение: "Kotlin plugin version is not the same as library version". Хотя я проверил — версия плагина 1.9.0, и в зависимостях я не указывал другую версию Kotlin. Я также проверил `gradle-wrapper.properties` — там Gradle 8.2. В чём может быть проблема? Может быть, я что-то упускаю? Пожалуйста, помогите разобраться. Заранее спасибо! <<>>

Причина предупреждения

Данное предупреждение возникает из-за несоответствия между версией плагина Kotlin (org.jetbrains.kotlin.android) и версией стандартной библиотеки Kotlin (kotlin-stdlib), которая подключается транзитивно через другие зависимости. Даже если вы явно указали версию плагина 1.9.0, одна из библиотек в вашем проекте может тянуть за собой другую версию Kotlin, например 1.8.22.

Как найти конфликтующую зависимость

Выполните команду ./gradlew :app:dependencies --configuration releaseRuntimeClasspath (или debugRuntimeClasspath). В выводе найдите строки, содержащие kotlin-stdlib. Пример проблемного вывода:

releaseRuntimeClasspath - Resolved configuration for variant: release
+--- org.jetbrains.kotlin:kotlin-stdlib:1.9.0
|    \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.9.0
+--- com.example:some-library:2.0.0
|    \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 1.9.0 (forced)

В этом примере видно, что библиотека some-library тянет kotlin-stdlib:1.8.22, но благодаря автоматическому разрешению конфликтов Gradle использует версию 1.9.0. Однако, если в вашем случае версия не совпадает (например, 1.8.22 не заменяется на 1.9.0), предупреждение останется.

Решение 1: Явное указание версии kotlin-stdlib

Добавьте в файл build.gradle.kts модуля app явную зависимость от kotlin-stdlib с версией, совпадающей с плагином:

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.0")
    // остальные зависимости
}

Решение 2: Использование BOM (Bill of Materials)

Если у вас несколько модулей, проще добавить BOM-зависимость в корневой build.gradle.kts:

dependencies {
    implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.9.0"))
}

Это гарантирует, что все подключаемые библиотеки Kotlin будут одной версии.

Решение 3: Принудительное исключение старой версии

Если вы нашли конкретную библиотеку, которая вызывает конфликт, исключите её транзитивную зависимость:

implementation("com.example:some-library:2.0.0") {
    exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib")
}

Решение 4: Обновление Gradle и плагина Android

Иногда проблема связана с устаревшей версией Android Gradle Plugin (AGP). Убедитесь, что у вас установлена последняя стабильная версия AGP (например, 8.2.0 или выше), так как старые версии некорректно обрабатывают метаданные Kotlin.

Проверка после исправления

После любого из решений выполните File > Invalidate Caches and Restart в Android Studio, затем синхронизируйте проект заново. Предупреждение должно исчезнуть.

<<>>

Альтернативный подход: Использование `kotlin("stdlib")`

Если вы предпочитаете более лаконичный синтаксис, можно использовать функцию kotlin() из Kotlin DSL. Вместо явного указания строки с артефактом:

implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.0")

Напишите так:

implementation(kotlin("stdlib"))

Это автоматически подставит версию, соответствующую версии плагина Kotlin, указанной в plugins. Данный подход особенно удобен, если вы используете несколько модулей — не нужно дублировать версию в каждом файле.

Дополнительная проверка

Иногда предупреждение может быть ложным срабатыванием Android Studio. Попробуйте:

  • Очистить кэш: ./gradlew clean
  • Пересобрать проект: ./gradlew assembleDebug
  • Проверить, не указана ли версия Kotlin в gradle.properties через переменную kotlin.version

Если после всех шагов предупреждение остаётся, но проект собирается без ошибок, можно просто игнорировать его — это известная проблема Android Studio, связанная с кэшированием метаданных.