Ошибка "unrecognized Attribute name MODULE" при сборке Kotlin/Android проекта
Причина ошибки
Ошибка unrecognized Attribute name MODULE возникает из-за несовместимости между версией компилятора Kotlin (или Java) и версией библиотеки kotlin-stdlib (или её транзитивных зависимостей). Конкретно: атрибут MODULE появился в Java 9+ для модульной системы (JPMS). Если вы используете JDK 11 или 17, но в проекте задействована старая версия kotlin-stdlib (например, 1.4.x), которая сгенерирована для Java 8, то javac из более новой JDK может не распознать этот атрибут в байткоде. Однако в вашем случае проблема чаще всего вызвана конфликтом версий Kotlin компилятора и плагина Gradle.
На практике это означает, что у вас установлен Kotlin плагин 1.7.10, но вместе с ним в classpath попала более старая версия kotlin-stdlib (например, 1.5.x) или наоборот — более новая версия компилятора пытается обработать старые классы. Также это может быть связано с использованием compileOptions с Java 11, но при этом сам JDK, который использует Gradle, — Java 8 (или наоборот).
Решение: обновление kotlin-stdlib и синхронизация JDK
Самый надёжный способ — явно указать версию kotlin-stdlib в зависимостях и убедиться, что она совпадает с версией плагина. Также нужно проверить, какой JDK использует Gradle.
- Проверьте JDK в Android Studio: File → Project Structure → SDK Location → Gradle JDK. Поставьте JDK 11 или 17 (но не 8).
- Обновите build.gradle.kts модуля app:
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android") version "1.7.10"
}
android {
compileSdk = 33
defaultConfig {
applicationId = "com.example.myapp"
minSdk = 24
targetSdk = 33
versionCode = 1
versionName = "1.0"
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
}
dependencies {
// Явно укажите версию kotlin-stdlib
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.7.10")
implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.appcompat:appcompat:1.5.1")
}
Важно: Версия kotlin-stdlib должна совпадать с версией плагина (1.7.10). Если у вас в проекте есть другие модули, проверьте их build.gradle на предмет старых версий kotlin.
Альтернативное решение: понижение или повышение версии JDK
Если проблема осталась, попробуйте изменить JDK, который использует Gradle:
- Переключитесь на JDK 17 (скачайте через Android Studio: SDK Manager → SDK Tools → Show Package Details → JDK 17).
- Или наоборот — на JDK 11, если у вас стоит 17.
Также можно добавить в gradle.properties (в корне проекта) строку:
kotlin.stdlib.default.dependency=false
Это отключит автоматическое добавление kotlin-stdlib, и вы сможете управлять версией вручную.
Проверка транзитивных зависимостей
Иногда ошибку вызывают библиотеки, которые тянут старый kotlin-stdlib. Выполните в терминале:
./gradlew app:dependencies --configuration implementation
Посмотрите, нет ли там kotlin-stdlib:1.5.x или 1.6.x. Если есть — добавьте в dependencies:
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.7.10") {
force = true
}
Это принудительно заменит все версии на 1.7.10.
После всех изменений сделайте File → Invalidate Caches and Restart, затем Build → Clean Project и Build → Rebuild Project.
<<Решение через обновление Gradle и Kotlin плагина
Иногда проблема решается простым обновлением версий. Ошибка unrecognized Attribute name MODULE может быть вызвана багом в старых версиях Gradle (ниже 7.0) или Kotlin плагина (ниже 1.6.0).
Попробуйте сделать следующее:
- Обновите Gradle wrapper до последней стабильной версии (например, 8.2). В файле
gradle/wrapper/gradle-wrapper.propertiesзамените:
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip
- Обновите Android Gradle Plugin (AGP) в корневом
build.gradle.kts:
plugins {
id("com.android.application") version "8.1.0" apply false
id("org.jetbrains.kotlin.android") version "1.9.0" apply false
}
- Обновите Kotlin плагин в модуле app до версии 1.9.0 (или 1.8.20) и синхронизируйте проект.
После этого ошибка должна исчезнуть, так как новые версии Kotlin и Gradle корректно обрабатывают атрибут MODULE. Если нет — проверьте, не используете ли вы устаревшие библиотеки типа kotlin-stdlib-jdk8 (замените на kotlin-stdlib).
Дополнительно: в Android Studio можно переключить JDK на встроенный (File → Project Structure → SDK Location → Use embedded JDK). Это часто решает проблемы совместимости.
Ответов пока нет.
Войдите чтобы оставить ответ