Kotlin: как исправить ошибку "Module was compiled with an incompatible version of Kotlin"

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Встречали "Module was compiled with an incompatible version of Kotlin"? Вы не одиноки!

Представьте: вы пишете код на Kotlin, всё работает как часы, но вдруг — бац! — и студия (или консоль) выдает длинное красное сообщение с угрожающим текстом про "incompatible version of Kotlin" и какие-то версии 1.5.1 и 1.1.16. Знакомая картина? Если вы когда-либо работали с Kotlin в Android Studio, IntelliJ IDEA или просто собирали проект через Gradle, то эта ошибка наверняка заставляла вас хвататься за голову.

Хорошая новость: она решается быстро и без хирургического вмешательства. Плохая новость: если не разобраться, она будет возвращаться снова и снова. Сегодня мы разберем эту ошибку по косточкам, поймем, почему она возникает, и навсегда забудем о ней. Поехали!

Что вообще значит это сообщение?

Давайте переведём с "компьютерного" на человеческий. Kotlin, как и любой современный язык, постоянно развивается. Каждая новая версия компилятора добавляет фичи, исправляет баги и... меняет формат внутренних метаданных (бинарных файлов, которые описывают ваши классы и функции).

Когда вы подключаете стороннюю библиотеку (или модуль своего проекта), компилятор проверяет: "А той ли версией Kotlin эта библиотека скомпилирована?" И если версия метаданных библиотеки (например, 1.5.1) не совпадает с версией, которую ожидает ваш текущий компилятор (например, 1.1.16), он справедливо возмущается. Это как пытаться вставить SD-карту от старого фотоаппарата в новый ноутбук — физически не подходит.

В нашем случае ошибка говорит: "Библиотека (модуль) собрана с метаданными версии 1.5.1, а я (компилятор) ожидаю версию 1.1.16". Обычно это означает, что версия плагина Kotlin в вашем проекте устарела или, наоборот, библиотека слишком новая.

Почему это происходит? 3 главные причины

1. Разнобой версий в Gradle (самое частое)

Вы когда-нибудь обновляли одну зависимость, забыв обновить сам плагин Kotlin? Или наоборот — обновили плагин, а старые библиотеки остались? Типичная ситуация для Android-проектов с кучей модулей.

// build.gradle (Project-level)
plugins {
    id 'org.jetbrains.kotlin.android' version '1.5.1' apply false // Плагин новый
}

// build.gradle (Module-level)
dependencies {
    implementation 'com.some.library:old-lib:1.0.0' // А эта либа собрана под Kotlin 1.1.16
}

Компилятор видит: плагин — 1.5.1, библиотека — старая. И кричит: "Несовместимость!"

2. Конфликт в мультимодульных проектах

Если у вас проект с несколькими модулями (например, app, core, feature), и в каждом своя версия Kotlin — ждите беды. Один модуль собран с Kotlin 1.5.1, другой — с 1.1.16. При попытке их связать вылетает та самая ошибка.

3. "Ручной" импорт JAR/AAR файлов

Скачали библиотеку из интернета и положили в папку libs? Отлично, но если эта библиотека собрана под другую версию Kotlin, чем ваш проект — привет, ошибка.

Как это выглядит в коде? Пример для понимания

Давайте смоделируем ситуацию. У вас есть проект на Kotlin 1.1.16 (да, старьё, но для примера сойдёт). Вы подключаете библиотеку, которая использует новейшие фичи Kotlin 1.5.1.

// Ваш код (Kotlin 1.1.16)
fun main() {
    val result = SomeLibrary().doSomething() // Ошибка!
    println(result)
}

А внутри библиотеки (версия 1.5.1) используется, скажем, inline fun interface или sealed interface, которых в старой версии просто нет. Компилятор не понимает, что это за зверь, и выдаёт ошибку несовместимости метаданных.

Пошаговое решение: от простого к сложному

Шаг 1. Проверьте версию плагина Kotlin

Откройте корневой build.gradle (или build.gradle.kts) вашего проекта. Найдите строку с версией Kotlin:

// Для Groovy (build.gradle)
plugins {
    id 'org.jetbrains.kotlin.android' version '1.9.0' apply false
}

// Для Kotlin DSL (build.gradle.kts)
plugins {
    id("org.jetbrains.kotlin.android") version "1.9.0" apply false
}

Что делать: Убедитесь, что версия актуальна. Если стоит 1.1.16, а библиотеки требуют 1.5.1 — обновите плагин до 1.9.0 или выше. Важно: обновление плагина может потянуть за собой обновление Gradle и Android SDK, но это нормально.

Шаг 2. Синхронизируйте версии во всех модулях

Если у вас несколько модулей, пропишите версию Kotlin в корневом build.gradle, чтобы все модули её наследовали:

// Корневой build.gradle
ext {
    kotlinVersion = '1.9.0'
}

// В каждом модуле
plugins {
    id 'org.jetbrains.kotlin.android' version "$kotlinVersion"
}

Шаг 3. Обновите зависимости

Иногда проблема в том, что библиотека слишком старая. Проверьте, есть ли у неё новая версия, совместимая с вашим Kotlin. Если библиотека не обновлялась с 2018 года — возможно, пора найти альтернативу.

Шаг 4. Clean & Rebuild

Звучит банально, но помогает в 50% случаев. Gradle иногда кэширует старые бинарники. Сделайте:

./gradlew clean
./gradlew build

Или в Android Studio: Build → Clean Project, затем Build → Rebuild Project.

Шаг 5. Проверьте файл .kotlin_module

Если ничего не помогло, возможно, в вашем проекте затесался старый .kotlin_module файл. Удалите папки build и .gradle вручную, затем пересоберите проект.

Как не допустить ошибку в будущем?

Профилактика — лучшее лекарство. Вот три простых правила:

  • Всегда используйте одну версию Kotlin

Блоги

Рекомендаций по книгам