Avatar ·

Ошибка "Module was compiled with an incompatible version of Kotlin" в Android Studio: как исправить?

Привет, коллеги! Я начинающий Android-разработчик, и у меня возникла проблема, которая не даёт мне покоя уже второй день. Я использую Android Studio и пишу на Kotlin. Вчера я решил обновить несколько зависимостей в проекте, а также добавил новую библиотеку для работы с корутинами (kotlinx-coroutines-android). После синхронизации Gradle проект перестал компилироваться, и я получаю следующую ошибку: "Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.16" Вот мой файл build.gradle (на уровне модуля app): ```kotlin plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' version '1.5.10' } android { compileSdk 31 defaultConfig { applicationId "com.example.myapp" minSdk 21 targetSdk 31 } } 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 плагина — стоит 1.5.10. Но в ошибке говорится про метаданные версии 1.5.1, а ожидается 1.1.16. Это очень странно, ведь версия плагина новее. Я пробовал чистить кэш, перезапускать студию, даже удалял папку .gradle — не помогло. Что я делаю не так? Может, нужно обновить сам Kotlin? Или это проблема с совместимостью библиотек? Подскажите, пожалуйста, как решить эту ошибку, потому что я уже перерыл весь StackOverflow, но ответы там слишком запутанные для новичка. <<>>

Причина ошибки и её решение

Привет! Ошибка, с которой ты столкнулся, возникает из-за несоответствия между версией 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, иначе могут быть проблемы с совместимостью.