Ошибка "Module was compiled with an incompatible version of Kotlin" в Android Studio: как исправить?
Причина ошибки и её решение
Привет! Ошибка, с которой ты столкнулся, возникает из-за несоответствия между версией Kotlin, используемой в твоём проекте (плагин компилятора), и версией, с которой были скомпилированы подключённые библиотеки. В твоём случае метаданные библиотеки (например, kotlinx-coroutines-android) имеют версию 1.5.1, а твой проект ожидает 1.1.16. Это звучит парадоксально, но на самом деле число 1.1.16 — это не версия Kotlin, а версия формата метаданных, которую ожидает старая версия плагина. Однако у тебя указана версия 1.5.10, что должно быть нормально. Проблема в другом: у тебя, скорее всего, конфликт версий в корневом файле build.gradle (на уровне проекта).
В современных проектах Android с Kotlin важно, чтобы версия плагина Kotlin в корневом build.gradle совпадала с версией в модуле app. У тебя плагин объявлен только в модуле app, но не указан в корне. Это приводит к тому, что Gradle использует устаревшую версию Kotlin для сборки, которая не понимает новые библиотеки. Вот как это исправить:
Шаг 1: Исправь корневой build.gradle (Project)
Открой файл build.gradle на уровне проекта (не модуля!). Он должен выглядеть так:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '7.0.4' apply false
id 'com.android.library' version '7.0.4' apply false
id 'org.jetbrains.kotlin.android' version '1.5.31' apply false
}
Обрати внимание: версия Kotlin плагина теперь 1.5.31 (это стабильный релиз, совместимый с большинством библиотек). Убедись, что версия Android Gradle Plugin (com.android.application) тоже актуальна (например, 7.0.4 или выше).
Шаг 2: Обнови build.gradle модуля app
Теперь в файле модуля app убери явное указание версии плагина Kotlin, потому что она будет браться из корневого файла:
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android' // версия не указывается, берётся из корня
}
android {
compileSdk 31
defaultConfig {
applicationId "com.example.myapp"
minSdk 21
targetSdk 31
}
// Важно: добавь блок для Kotlin, если используешь compose или другие фичи
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0'
// Убедись, что версия kotlin-stdlib совпадает с версией плагина
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.31"
}
Шаг 3: Синхронизируй и очисти проект
После изменений нажми File → Sync Project with Gradle Files. Затем выполни Build → Clean Project и Build → Rebuild Project. Это обновит кэш и пересоберёт всё с правильными версиями.
Почему это работает?
Ошибка "binary version of its metadata is 1.5.1, expected version is 1.1.16" означает, что библиотека скомпилирована с форматом метаданных Kotlin 1.5.x, а твой проект использует старый формат (1.1.x). Это происходит, когда плагин Kotlin в проекте слишком старый или неправильно настроен. Указав единую версию в корневом файле, ты гарантируешь, что все модули используют одинаковый компилятор, который понимает современные метаданные.
Если проблема останется, проверь, нет ли в зависимостях библиотек, которые тянут старую версию Kotlin (например, через implementation platform('org.jetbrains.kotlin:kotlin-bom:1.5.31')). Также убедись, что Android Studio обновлена до последней версии.
Альтернативный подход: использование BOM (Bill of Materials)
Если первый способ не помог или ты хочешь более гибкого управления версиями Kotlin, попробуй использовать Kotlin BOM. Это специальный файл, который автоматически выравнивает версии всех Kotlin-зависимостей. Добавь в dependencies модуля app:
dependencies {
implementation platform('org.jetbrains.kotlin:kotlin-bom:1.5.31')
implementation 'org.jetbrains.kotlin:kotlin-stdlib' // версия не указывается
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0'
// остальные зависимости
}
BOM гарантирует, что все артефакты Kotlin (stdlib, reflect, test) будут одной версии. Это особенно полезно, если у тебя много зависимостей и ты боишься конфликтов. Также проверь, что в корневом build.gradle указана та же версия плагина (например, 1.5.31).
Примечание: Если ты используешь Android Gradle Plugin версии 7.0+, убедись, что версия Kotlin не ниже 1.5.0, иначе могут быть проблемы с совместимостью.