Ошибка "Module was compiled with an incompatible version of Kotlin": как исправить бинарную несовместимость версий?
Причина ошибки и общее решение
Ошибка возникает из-за несовместимости версий Kotlin между вашим проектом и одной из зависимостей (в вашем случае — Stripe SDK). Сообщение binary version of its metadata is 1.5.1, expected version is 1.1.15 означает, что Stripe скомпилирован с Kotlin 1.5.x, а ваш проект использует более старую версию (1.3.50). Gradle не может загрузить метаданные модуля, потому что формат бинарных данных изменился.
Пошаговое исправление
- Обновите Kotlin до актуальной версии. Для Flutter 3.0.0 рекомендуется Kotlin 1.7.0 или выше. Откройте
android/build.gradleи измените:
ext.kotlin_version = '1.7.10'
dependencies {
classpath 'com.android.tools.build:gradle:7.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
- Синхронизируйте версию в
android/app/build.gradle. Убедитесь, что в этом файле тоже указана та же версия Kotlin:
android {
...
kotlinOptions {
jvmTarget = '1.8'
}
}
- Обновите Stripe SDK до последней версии. В
pubspec.yamlзамените:
dependencies:
flutter:
sdk: flutter
stripe_payment: ^1.15.0 // или новее
- Выполните чистую пересборку. В терминале выполните:
flutter clean
flutter pub get
cd android
./gradlew clean
cd ..
flutter run
Почему это работает?
Stripe SDK (начиная с версии 1.10.0) требует Kotlin 1.5.x или новее. Если ваш проект использует старую версию Kotlin, Gradle не может загрузить модуль Stripe, потому что его метаданные скомпилированы в новом формате, который не читается старым плагином. Обновление Kotlin до 1.7.x решает проблему, так как эта версия обратно совместима с 1.5.x.
Дополнительные советы
- Проверьте другие зависимости. Иногда несколько пакетов могут требовать разные версии Kotlin. Используйте команду
flutter pub depsдля просмотра дерева зависимостей. - Если ошибка осталась, попробуйте удалить папку
android/.gradleи повторить сборку. - Для Flutter 3.7+ рекомендуется Kotlin 1.8.0 и Gradle 7.6.0.
Альтернативный подход: использование Kotlin Gradle DSL
Если вы предпочитаете более современный способ конфигурации, можно перейти с Groovy (.gradle) на Kotlin DSL (.gradle.kts). Это часто помогает избежать проблем с версиями, так как Kotlin DSL автоматически синхронизирует версию Kotlin для Gradle-скриптов.
Пример перехода
Вместо android/build.gradle создайте android/build.gradle.kts:
plugins {
id("com.android.application") version "7.2.0" apply false
id("org.jetbrains.kotlin.android") version "1.7.10" apply false
}
В android/app/build.gradle.kts:
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
android {
compileSdk = 33
defaultConfig {
minSdk = 21
targetSdk = 33
}
kotlinOptions {
jvmTarget = "1.8"
}
}
Преимущества
- Единая версия Kotlin для всего проекта (Gradle-скрипты и код).
- Лучшая поддержка типов и автодополнения в IDE.
- Меньше ошибок несовместимости версий.
После перехода обязательно выполните flutter clean и пересборку.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги