Предупреждение "Outdated Kotlin Runtime" в Android Studio: как исправить?
Причина проблемы
Предупреждение "Outdated Kotlin Runtime" возникает, когда версия Kotlin runtime (исполняемой среды) в classpath проекта не совпадает с версией Kotlin компилятора, указанной в плагине. Это типичная ситуация после обновления Android Studio или Kotlin плагина, когда старые зависимости (например, из модулей или библиотек) остаются с предыдущей версией.
Решение: синхронизация версий Kotlin
Чтобы исправить проблему, нужно убедиться, что все Kotlin-зависимости в проекте используют одну и ту же версию. Сделайте следующее:
- Проверьте файл
build.gradleна уровне проекта (Project: MyApp). Убедитесь, что версия Kotlin плагина задана в блокеplugins:
// build.gradle (Project level)
plugins {
id 'com.android.application' version '7.0.0' apply false
id 'com.android.library' version '7.0.0' apply false
id 'org.jetbrains.kotlin.android' version '1.5.0' apply false
}
- Проверьте файл
app/build.gradle. Убедитесь, что там тоже используется та же версия Kotlin:
// app/build.gradle
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
android {
// ... конфигурация
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.0"
// другие зависимости
}
Важно: явно укажите kotlin-stdlib с той же версией, что и плагин. Если вы используете kotlin-stdlib-jdk7 или kotlin-stdlib-jdk8, их тоже нужно обновить.
- Проверьте все модули. Если в проекте есть другие модули (например, библиотеки), в их
build.gradleтакже должны быть указаны одинаковые версии Kotlin. Используйте переменную для централизованного управления версиями:
// В build.gradle (Project level)
ext.kotlin_version = '1.5.0'
// В каждом модуле
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
- Обновите зависимости библиотек. Некоторые библиотеки (например, Anko, Ktor) тянут старые версии Kotlin runtime. Выполните команду в терминале:
./gradlew app:dependencies --configuration debugRuntimeClasspath
Найдите строки с kotlin-stdlib и проверьте их версии. Если видите старые версии (например, 1.4.0), добавьте в app/build.gradle принудительное разрешение конфликтов:
configurations.all {
resolutionStrategy {
force "org.jetbrains.kotlin:kotlin-stdlib:1.5.0"
force "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.0"
force "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.0"
}
}
- Синхронизируйте и пересоберите проект. Нажмите
File -> Sync Project with Gradle Files, затемBuild -> Clean ProjectиBuild -> Rebuild Project.
Дополнительные советы
- Обновите Android Studio до последней стабильной версии (через Help -> Check for Updates).
- Если используете Kotlin Extensions (например,
kotlin-android-extensions), замените их на ViewBinding или Jetpack Compose, так как Extensions устарели и могут вызывать конфликты. - Проверьте, нет ли в проекте файлов
kotlin-stdlib-*.jarв папкеlibs/— удалите их, если они есть.
После этих шагов предупреждение исчезнет, а ошибка KotlinReflectionInternalError перестанет появляться. Если проблема осталась — создайте новый проект и перенесите код вручную, это часто решает мистические конфликты версий.
Альтернативный подход: использование Kotlin BOM (Bill of Materials)
Если вы устали вручную синхронизировать версии всех Kotlin-зависимостей, попробуйте использовать Kotlin BOM. Это централизованный способ управлять версиями Kotlin библиотек, который автоматически подтягивает совместимые версии.
Добавьте в app/build.gradle следующее:
dependencies {
implementation platform('org.jetbrains.kotlin:kotlin-bom:1.5.0')
implementation 'org.jetbrains.kotlin:kotlin-stdlib'
implementation 'org.jetbrains.kotlin:kotlin-reflect'
// другие зависимости Kotlin без указания версии
}
BOM гарантирует, что все библиотеки Kotlin будут одной версии. Это особенно полезно, если у вас много зависимостей (например, kotlinx-coroutines, kotlinx-serialization).
Также проверьте, не используете ли вы устаревший плагин kotlin-android-extensions. Если в app/build.gradle есть строка apply plugin: 'kotlin-android-extensions', удалите её и перепишите код на ViewBinding:
android {
buildFeatures {
viewBinding = true
}
}
После этого в коде используйте binding.textView.text = "Hello" вместо textView.text. Это не только решит проблему с runtime, но и сделает код более современным и безопасным.
Ответов пока нет.
Войдите чтобы оставить ответ