Ошибка 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"
Причина ошибки и общее решение
Ошибка возникает, когда одна из зависимостей (в вашем случае — 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 до совместимых версий. Вот проверенный порядок действий:
- Обновите 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"
}
}
- Обновите Gradle wrapper (файл
gradle-wrapper.properties):
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
- Обновите
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'
}
- Синхронизируйте проект: File → Sync Project with Gradle Files.
- Очистите кеш: 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 для единообразия.