Ошибки с 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'. Это приводит к конфликтам.

Как исправить: пошаговые действия

  1. Проверьте Gradle Wrapper

    • Откройте gradle/wrapper/gradle-wrapper.properties и убедитесь, что версия Gradle совместима с AGP, который вы планируете использовать (см. таблицу совместимости в документации AGP).
    • Обновите wrapper: ./gradlew wrapper --gradle-version X.Y
  2. Обновите 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'
}
  1. Не смешивайте подходы

    • Выберите один способ: старый buildscript + apply plugin (подходит для проектов с legacy зависимостями) или plugins DSL (современный). Удалите дубли.
  2. Проверьте repositories и pluginManagement

    • Для plugins DSL убедитесь, что settings.gradle содержит pluginManagement с репозиториями:
pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}
  1. Исправьте синтаксис apply/ID для Kotlin-плагинов

    • Kotlin-плагин: apply plugin: 'kotlin-android' (старый) или plugins { id 'org.jetbrains.kotlin.android' version '1.8.0' }.
  2. Очистка и пересборка

    • Выполните ./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, я быстро подскажу конкретные исправления.