Avatar ·

Ошибка "Module was compiled with an incompatible version of Kotlin" в Android Studio

Привет! Я новичок в Android-разработке и Kotlin. Недавно обновил Android Studio до последней версии, и после этого мой проект перестал собираться. Вылезает вот такая ошибка: ``` 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` (уровень проекта): ```kotlin buildscript { ext.kotlin_version = "1.3.72" repositories { google() jcenter() } dependencies { classpath "com.android.tools.build:gradle:4.1.0" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } ``` И файл уровня модуля (app/build.gradle): ```kotlin apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 30 defaultConfig { applicationId "com.example.myapp" minSdkVersion 21 targetSdkVersion 30 versionCode 1 versionName "1.0" } } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.appcompat:appcompat:1.2.0' } ``` Ошибка возникает при попытке использовать библиотеку `core-ktx` или другие AndroidX-зависимости. Я читал, что это может быть связано с несовместимостью версий Kotlin, но не понимаю, как это исправить. Пробовал менять версию Kotlin на 1.4.0, 1.5.0 — ничего не помогает. Подскажите, пожалуйста, что я делаю не так? <<>>

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

Ошибка "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" возникает из-за несоответствия версии Kotlin, используемой в вашем проекте, и версии, с которой были скомпилированы подключенные библиотеки (например, AndroidX). В вашем случае:

  • Вы используете Kotlin 1.3.72 (старая версия).
  • Библиотеки AndroidX (core-ktx:1.3.2) скомпилированы с Kotlin 1.5.1.
  • Gradle плагин Android (4.1.0) ожидает метаданные Kotlin версии 1.1.16 — это внутренняя версия метаданных, которая не совпадает с 1.5.1.

Решение: обновить версию Kotlin в проекте до актуальной, совместимой с используемыми библиотеками.

Пошаговое исправление

  1. Обновите Kotlin-плагин в файле build.gradle (уровень проекта). Замените kotlin_version на актуальную версию. На момент написания ответа (2024 год) рекомендуется версия 1.9.0 или новее. Пример:
    buildscript {
        ext.kotlin_version = "1.9.0"
        repositories {
            google()
            mavenCentral() // jcenter устарел, используйте mavenCentral
        }
        dependencies {
            classpath "com.android.tools.build:gradle:8.1.0" // обновите Gradle плагин
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        }
    }
  2. Обновите Gradle-плагин Android до версии, совместимой с новой версией Kotlin. Например, для Kotlin 1.9.0 используйте Android Gradle Plugin 8.1.0 или выше. Проверьте совместимость на официальном сайте.
  3. Обновите зависимости в app/build.gradle. Убедитесь, что все библиотеки используют последние версии:
    dependencies {
        implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
        implementation 'androidx.core:core-ktx:1.12.0' // последняя версия
        implementation 'androidx.appcompat:appcompat:1.6.1'
    }
  4. Синхронизируйте проект (File → Sync Project with Gradle Files) и выполните Clean Build (Build → Clean Project, затем Build → Rebuild Project).

Альтернативный вариант: если нужно оставить старые версии

Если вы не можете обновить Kotlin (например, из-за legacy-кода), попробуйте зафиксировать совместимые версии библиотек. Например, для Kotlin 1.3.72 используйте старые версии AndroidX:

dependencies {
    implementation 'androidx.core:core-ktx:1.3.0' // совместимо с Kotlin 1.3.x
    implementation 'androidx.appcompat:appcompat:1.2.0'
}

Но это временное решение — рано или поздно вам придется обновить Kotlin.

Проверка совместимости

Чтобы избежать подобных ошибок в будущем, следуйте правилу: версия Kotlin должна быть не ниже версии, с которой собраны все зависимости. Используйте gradle-wrapper.properties для обновления Gradle:

distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip

После всех изменений запустите сборку. Ошибка должна исчезнуть.

<<>>

Дополнительный способ: очистка кэша и инвалидация

Иногда проблема возникает не из-за несовместимости версий, а из-за поврежденного кэша Gradle или Android Studio. Если обновление версий не помогло, попробуйте следующие шаги:

  1. Инвалидируйте кэш Android Studio: File → Invalidate Caches / Restart → выберите "Invalidate and Restart". После перезапуска студия перестроит кэш.
  2. Очистите кэш Gradle вручную: удалите папку .gradle в корне проекта и папку ~/.gradle/caches (для Windows: C:\Users\ВашеИмя\.gradle\caches). Затем выполните Clean и Rebuild.
  3. Проверьте версию Kotlin в плагинах: если вы используете сторонние плагины (например, kotlinx.serialization), их версии также должны быть совместимы. Обновите их до последних версий.

Этот метод особенно полезен, если ошибка появляется после обновления Android Studio или импорта чужого проекта. В 90% случаев инвалидация кэша решает проблему, если версии уже правильные.