Ошибки с com.android.application и apply plugin в Gradle: быстрое руководство
В большинстве случаев проблему решают: обновление Gradle Wrapper и Android Gradle Plugin (AGP), удаление дублирующих объявлений плагина (plugins DSL + apply), и приведение buildscript/pluginManagement к одной схеме. Ниже — конкретные шаги и примеры конфигураций.
Почему появляются ошибки с com.android.application и apply plugin
Ошибки возникают из‑за несоответствия версий Gradle и AGP, смешения двух способов подключения плагинов (plugins DSL и старого apply plugin), или отсутствия нужных репозиториев/classpath. После обновления Gradle нужно также обновить AGP — иначе плагин не будет найден или выдаст UnsupportedClassVersionError.
Частая ошибка — одновременно использовать plugins { id 'com.android.application' version 'X' } и apply plugin: 'com.android.application'. Это приводит к конфликтам.
Как исправить: пошаговые действия
-
Проверьте Gradle Wrapper
- Откройте gradle/wrapper/gradle-wrapper.properties и убедитесь, что версия Gradle совместима с AGP, который вы планируете использовать (см. таблицу совместимости в документации AGP).
- Обновите wrapper: ./gradlew wrapper --gradle-version X.Y
-
Обновите Android Gradle Plugin
- Если вы используете buildscript/classpath, в файле build.gradle (проект) укажите:
buildscript {
repositories { google(); mavenCentral() }
dependencies {
classpath 'com.android.tools.build:gradle:7.4.2' // пример
}
}
- Если используете plugins DSL — укажите версию в plugins блоке (модульный build.gradle):
plugins {
id 'com.android.application' version '7.4.2'
}
-
Не смешивайте подходы
- Выберите один способ: старый buildscript + apply plugin (подходит для проектов с legacy зависимостями) или plugins DSL (современный). Удалите дубли.
-
Проверьте repositories и pluginManagement
- Для plugins DSL убедитесь, что settings.gradle содержит pluginManagement с репозиториями:
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
-
Исправьте синтаксис apply/ID для Kotlin-плагинов
- Kotlin-плагин: apply plugin: 'kotlin-android' (старый) или plugins { id 'org.jetbrains.kotlin.android' version '1.8.0' }.
-
Очистка и пересборка
- Выполните ./gradlew clean assembleDebug или Invalidate Caches/Restart в Android Studio.
Примеры корректной конфигурации
- Старый (buildscript + apply), модульный build.gradle:
// project build.gradle
buildscript {
repositories { google(); mavenCentral() }
dependencies { classpath 'com.android.tools.build:gradle:4.2.2' }
}
// app module build.gradle
apply plugin: 'com.android.application'
android { compileSdkVersion 31 /* ... */ }
- Современный (plugins DSL):
// settings.gradle
pluginManagement {
repositories { google(); mavenCentral(); gradlePluginPortal() }
}
// app module build.gradle
plugins {
id 'com.android.application' version '7.4.2'
id 'org.jetbrains.kotlin.android' version '1.8.0'
}
android { compileSdk 33 /* ... */ }
Частые ошибки и как их исправить
- "Plugin with id 'com.android.application' not found" — проверьте repository/путь classpath или pluginManagement, совместимость версий.
- "Could not find com.android.tools.build:gradle" — добавьте google() и mavenCentral() в repositories в верхнем build.gradle или settings.pluginManagement.
- "Deprecated Gradle features" — обновите плагины и уберите устаревший синтаксис.
- "Unsupported major.minor version" — это несовместимость Java; используйте JDK, поддерживаемый AGP.
Если проект большой и много модулей, переходите на plugins DSL постепенно: сначала тестируйте в отдельной ветке и обновляйте Gradle Wrapper + AGP одновременно.
FAQ
-
Нужно ли указывать версию AGP в каждом модуле?
- Лучше централизовать: использовать buildscript в проекте или pluginManagement в settings.gradle. В plugins DSL можно указывать версию в модуле, но это сложнее поддерживать в многомодульных проектах.
-
Как быстро проверить совместимость Gradle ↔ AGP?
- В релиз-нотах AGP указана минимальная и рекомендуемая версия Gradle. Сверьте версии перед обновлением.
-
После чего снова появилась ошибка?
- Откатите последние изменения в build files, запустите ./gradlew --refresh-dependencies и проверьте логи сборки для точной причины.
Если вы пришлёте содержимое своих build.gradle (проект и модуль) и gradle-wrapper.properties, я быстро подскажу конкретные исправления.