Ошибка "unrecognized Attribute name MODULE" при сборке Android/Kotlin проекта
Причина ошибки
Ошибка unrecognized Attribute name MODULE возникает из-за несовместимости между версией Java (JDK), используемой для сборки, и версией плагина Kotlin или Android Gradle Plugin (AGP). Конкретно: начиная с Java 9, в байт-коде появился атрибут Module, который используется для модульной системы Java. Старые версии инструментов сборки (например, утилита javac из JDK) не умеют корректно обрабатывать этот атрибут, когда он встречается в скомпилированных классах.
В вашем случае проблема в том, что вы используете OpenJDK 17, но при этом Gradle или AGP могут подтягивать старую версию javac (часть JDK) или использовать его несовместимым образом. Чаще всего это происходит, когда в системе установлено несколько JDK, и Gradle выбирает неправильный.
Решение
Вот пошаговая инструкция, как исправить ошибку:
- Проверьте, какая Java используется Gradle
Откройте терминал в корневой папке проекта и выполните:
(на Windows —./gradlew --versiongradlew --version). Обратите внимание на строкуJVM— там должно быть указано17или выше. Если там Java 11 или 8 — это проблема. - Настройте JDK в Android Studio
Зайдите вFile → Settings → Build, Execution, Deployment → Build Tools → Gradle. Убедитесь, что в полеGradle JDKвыбран OpenJDK 17 (или 21, если у вас последняя версия). Если нет — выберите правильный. - Обновите AGP и Kotlin плагин
В корневомbuild.gradle.kts(уровень проекта) обновите версии:
В модульномplugins { id("com.android.application") version "8.4.0" apply false id("org.jetbrains.kotlin.android") version "1.9.24" apply false }build.gradle.ktsоставьте толькоid("com.android.application")иid("org.jetbrains.kotlin.android")— без версий. - Явно укажите JDK в gradle.properties
Добавьте в файлgradle.properties(в корне проекта):
Путь к JDK замените на свой актуальный.org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 -Djava.home="C:\Program Files\Java\jdk-17" - Очистите кэш и пересоберите
После всех изменений выполните:./gradlew clean ./gradlew assembleDebug
Почему это работает?
Ошибка исчезает, потому что мы:
- Убираем несовместимость версий (AGP 8.4+ корректно работает с Java 17)
- Обновляем Kotlin плагин, который тоже адаптирован под новые JDK
- Явно указываем Gradle, какой JDK использовать — это исключает случайный выбор старой версии
После этих действий атрибут Module будет корректно обрабатываться, и сборка пройдёт успешно.
Альтернативный подход: использование JDK 11
Если по каким-то причинам вы не можете обновить AGP или Kotlin плагин (например, из-за legacy кода), можно временно откатиться на JDK 11. Этот JDK не генерирует атрибут Module, и ошибка не возникнет.
- Скачайте OpenJDK 11 (например,
jdk-11.0.22) - В Android Studio:
File → Project Structure → SDK Location → JDK Locationукажите путь к JDK 11 - В
build.gradle.ktsизмените:compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } kotlinOptions { jvmTarget = "11" } - Пересоберите проект через
Build → Clean Projectи затемRebuild Project
Важно: Это временное решение. JDK 11 уже устарел, и многие библиотеки (например, Jetpack Compose) могут требовать Java 17+ для новых функций. Рекомендую в ближайшее время обновить все инструменты до актуальных версий.