Avatar ·

Ошибка Kotlin: "Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.15"

Всем привет! Я новичок в разработке под Android, использую Kotlin и Flutter. После обновления Gradle и добавления библиотеки Stripe в проект (платежи) я столкнулся с ошибкой при сборке: ``` Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.15 ``` Я работаю над приложением для интернет-магазина. Вот мой `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" } } ``` А в `build.gradle` модуля app у меня такие зависимости: ```kotlin dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation 'com.stripe:stripe-android:16.0.0' implementation 'androidx.core:core-ktx:1.6.0' } ``` После добавления Stripe сборка падает с этой ошибкой. Я читал, что это из-за несовместимости версий Kotlin, но не понимаю, как исправить. Пробовал менять `kotlin_version` на 1.4.32 — не помогло. Подскажите, что делать? Заранее спасибо! <<>>

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

Ошибка возникает, когда одна из зависимостей (в вашем случае — Stripe SDK) скомпилирована с более новой версией Kotlin, чем та, что используется в вашем проекте. Stripe Android SDK 16.0.0 требует Kotlin 1.5.x, а у вас стоит 1.3.72. Метаданные Kotlin версии 1.5.1 несовместимы с метаданными версии 1.1.15.

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

Вам нужно обновить Kotlin и Gradle до совместимых версий. Вот проверенный порядок действий:

  1. Обновите Kotlin в корневом build.gradle до версии 1.5.31 (или новее):
buildscript {
    ext.kotlin_version = '1.5.31'  // или 1.6.10, 1.7.10
    repositories {
        google()
        mavenCentral()  // вместо jcenter (устарел)
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.4'  // обновляем Gradle
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
  1. Обновите Gradle wrapper (файл gradle-wrapper.properties):
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
  1. Обновите build.gradle модуля app:
android {
    compileSdkVersion 31
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 31
    }
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'com.stripe:stripe-android:20.20.0'  // обновлённая версия
    implementation 'androidx.core:core-ktx:1.8.0'
}
  1. Синхронизируйте проект: File → Sync Project with Gradle Files.
  2. Очистите кеш: Build → Clean Project, затем Build → Rebuild Project.

Если используете Flutter

В Flutter проектах Kotlin обновляется в android/build.gradle. Убедитесь, что в android/gradle.properties нет ограничений на версию Kotlin.

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

Используйте таблицу совместимости:

  • Kotlin 1.5.x → Gradle 7.0+, AGP 7.0+
  • Kotlin 1.6.x → Gradle 7.2+, AGP 7.1+
  • Kotlin 1.7.x → Gradle 7.4+, AGP 7.3+

После этих изменений ошибка должна исчезнуть. Если остались проблемы — проверьте, нет ли других библиотек, требующих старую версию Kotlin, и обновите их.

<<>>

Альтернативный подход: использование совместимой версии Stripe

Если по каким-то причинам вы не можете обновить Kotlin (например, из-за других зависимостей), можно откатить Stripe до версии, совместимой с вашей текущей версией Kotlin.

Stripe Android SDK версии 14.0.0 работает с Kotlin 1.3.x. Измените зависимость в build.gradle:

dependencies {
    implementation 'com.stripe:stripe-android:14.0.0'
}

Это временное решение. Оно не рекомендуется, так как вы потеряете новые функции и исправления безопасности. Лучше всё же обновить Kotlin, но если проект большой и обновление рискованно — этот вариант сработает.

Также проверьте, не конфликтуют ли версии Kotlin в разных модулях (если у вас многомодульный проект). Используйте kotlinOptions.jvmTarget = "1.8" в блоке android для единообразия.