Ошибка Backend Internal error при использовании clickable в Jetpack Compose
Причина ошибки
Ошибка Backend Internal error: Exception during IR lowering в Jetpack Compose обычно возникает из-за несовместимости версий Kotlin и Compose Compiler. Дело в том, что Compose использует собственный плагин компилятора (Compose Compiler), который генерирует IR-код (Intermediate Representation) для модификаторов, лямбд и других Compose-специфичных конструкций. Если версия Kotlin не соответствует версии Compose Compiler, процесс "понижения" (lowering) IR ломается, вызывая эту ошибку.
В вашем случае проблема не в коде, а в конфигурации проекта. Даже если вы используете "последние стабильные версии", они могут быть несовместимы. Например, Compose 1.5.x требует Kotlin 1.9.0-1.9.10, а вы указали Kotlin 1.9.21 — это уже несовместимость.
Решение
Вам нужно синхронизировать версии Kotlin и Compose Compiler. Есть два способа:
Способ 1: Использовать Kotlin, совместимый с вашей версией Compose
Откройте файл build.gradle.kts (уровня проекта) и укажите версию Kotlin, которая поддерживается вашей версией Compose. Актуальную таблицу совместимости можно найти в официальной документации. На момент написания ответа для Compose 1.5.4 подходит Kotlin 1.9.10:
// build.gradle.kts (project level)
plugins {
id("org.jetbrains.kotlin.android") version "1.9.10" apply false
// другие плагины...
}
После изменения синхронизируйте проект (Sync Now).
Способ 2: Явно указать версию Compose Compiler (рекомендуется)
Лучшая практика — принудительно задать версию плагина Compose Compiler, которая совместима с вашим Kotlin. Для этого в файле build.gradle.kts модуля (app) добавьте блок composeOptions:
// build.gradle.kts (app module)
android {
// ...
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.5.8" // для Kotlin 1.9.21
}
}
Таблица соответствия версий (актуальна на конец 2024 года):
- Compose Compiler 1.5.8 → Kotlin 1.9.21
- Compose Compiler 1.5.7 → Kotlin 1.9.20
- Compose Compiler 1.5.5 → Kotlin 1.9.11
- Compose Compiler 1.5.4 → Kotlin 1.9.10
После добавления kotlinCompilerExtensionVersion ошибка должна исчезнуть. Ваш код корректен, проблема исключительно в сборке.
Дополнительные советы
- Всегда проверяйте таблицу совместимости на официальной странице Compose Kotlin Compatibility.
- Если используете
compose-bom(Bill of Materials), убедитесь, что его версия также совместима с вашим Kotlin. - Очистите кеш после изменения версий: Build → Clean Project, затем Build → Rebuild Project.
Альтернативное решение: проверка обновлений Gradle и плагинов
Иногда ошибка Backend Internal error возникает не из-за несовместимости Kotlin/Compose, а из-за устаревшего плагина Gradle или Android Gradle Plugin (AGP). Попробуйте обновить их до последних стабильных версий:
// build.gradle.kts (project level)
plugins {
id("com.android.application") version "8.2.0" apply false
id("org.jetbrains.kotlin.android") version "1.9.21" apply false
// ...
}
Также проверьте, что в gradle-wrapper.properties указана актуальная версия Gradle (например, 8.4+). После обновления выполните File → Invalidate Caches and Restart.
Если проблема остаётся, попробуйте временно заменить .clickable на Modifier.pointerInput(Unit) { detectTapGestures { count++ } } — это поможет убедиться, что ошибка связана именно с компилятором, а не с логикой кода.