Android Gradle Plugin (AGP) — это поддерживаемая система сборки для приложений Android, которая включает в себя поддержку компиляции множества различных типов исходных файлов и их объединения в приложение, которое можно запускать на физическом устройстве Android или в эмуляторе.
В следующем разделе описывается запланированное развитие DSL и API AGP. По мере внедрения новых API в стабильных релизах старые API будут помечаться как устаревшие. Эти устаревшие API станут недоступны в следующем стабильном релизе. В следующих разделах представлена информация о предстоящих изменениях в каждом крупном релизе AGP.
Более подробный список устаревших или удаленных функций API AGP см. в разделе « Обновления API AGP» .
AGP 10.0 (конец 2026 г.)
Изменения и модернизация API плагина Android Gradle 10.0
AGP 10.0 завершает переход к полностью отложенной модели сборки, совместимой с кэшем конфигурации. Этот релиз является кульминацией многолетней работы по замене устаревших API, не использующих отложенную обработку, на более безопасную и производительную архитектуру.
Почему используется упрощенная модель сборки?
В устаревшей модели сборки без отложенной обработки Gradle выполняет предварительную оценку объектов, запрашивает данные вариантов и настраивает задачи во всех модулях проекта при каждом запуске синхронизации или сборки. Эта предварительная оценка приводит к нерациональному использованию процессорного времени и памяти для вариантов и задач, которые не выполняются, а также вызывает конфликты порядка оценки в сложных скриптах сборки.
Переход к полностью отложенной модели сборки с использованием отложенных поставщиков ( Provider<T> ) и современного API вариантов ( androidComponents {} ) позволяет вычислять свойства и привязку задач отложенно, только по запросу, когда это необходимо для активного графа выполнения сборки.
Удаляемые в этом релизе устаревшие API были принципиально несовместимы с современной архитектурой. Их удаление позволяет AGP в полной мере поддерживать кэширование конфигурации Gradle и изоляцию проекта, что значительно повышает скорость сборки и время синхронизации в Android Studio.
Основное архитектурное различие
Устаревший API BaseVariant ( applicationVariants.all {} ) был ориентирован на выполнение задач и предоставлял разработчикам прямой доступ к задачам Gradle и внутренним конфигурациям на этапе настройки, что по своей сути нарушает работу современных функций повышения производительности Gradle.
Новый API Variant ( androidComponents {} ) является ленивым и ориентированным на артефакты. Он широко использует API свойств Gradle и полностью удаляет все ссылки на Task и TaskProvider , требуя от вас чистого взаимодействия с входными и выходными данными ( Variant.artifacts ), а не с самими базовыми задачами.
Что демонтируется и заменяется
Все предыдущие интерфейсы и классы, использовавшиеся в устаревшем DSL и старом API вариантов, удалены. Для подготовки скриптов сборки и пользовательских плагинов откажитесь от следующих API и флагов, поддержка которых прекращена:
| Удалён API или функция. | Необходима замена или действия. |
|---|---|
Прямой доступ к задаче:
| API для работы с артефактами: вместо получения данных о задаче для изменения ее поведения используйте variant.artifacts для добавления, изменения или замены фактических файлов (артефактов), передаваемых между задачами. |
Активная регистрация источника:
| API источников: Укажите выходной каталог вашей пользовательской задачи с помощью variant.sources.java.addGeneratedSourceDirectory(...) . |
Доступ к Classpath/configuration:
| API инструментирования: Для изменения или анализа байт-кода (наиболее распространенный вариант использования доступа к classpath) используйте variant.instrumentation.transformClassesWith(...) с помощью AsmClassVisitorFactory . |
Стремительная мутация свойств:
| Ленивые экземпляры `MapProperty`: используйте variant.buildConfigFields.put(...) и variant.manifestPlaceholders.put(...) . |
Флаги отказа от участия:
| Прямая замена отсутствует. Удалите эти флаги из gradle.properties ; здесь строго соблюдаются требования современного DSL и встроенного Kotlin. |
Расширения API устаревших вариантов:
| Замените на androidComponents.onVariants() . |
Фильтрация вариантов (блок variantFilter ) | Замените на androidComponents.beforeVariants() , используя селекторы вариантов. |
Компоненты SDK и NDK:
| Доступ к компонентам SDK осуществляется через androidComponents.sdkComponents . |
Тестовые среды:
| Перенесите регистрацию пользовательских тестовых устройств на устройства, управляемые Gradle. |
Устаревшие API регистрации:
| Удалено без прямой замены. |
| API преобразования | Замените преобразования на API артефактов и AsmClassVisitorFactory . |
Для доступа ко всем заменяемым интерфейсам DSL и Variant API ( androidComponents {} ) и классам всегда используйте артефакт gradle-api при разработке пользовательских плагинов Gradle или логики сборки.
Этапы миграции
Чтобы переход на AGP 10.0 прошел гладко и предсказуемо, следуйте этим рекомендациям по миграции:
- Запустите помощник обновления AGP: Перед прямым обновлением до версии 10.0 запустите официальный помощник обновления AGP в Android Studio (
Tools > AGP Upgrade Assistant). Он автоматизирует несколько распространенных миграций DSL и скриптов сборки и помогает сохранить существующее поведение сборки. - Используйте навыки режима агента в Android Studio: воспользуйтесь навыками обновления с помощью ИИ (например, навыками обновления AGP, доступными в репозитории навыков Android ), чтобы автоматизировать и упростить миграцию сложной логики сборки и DSL внутри Android Studio.
- Сначала исправьте предупреждения об устаревании в AGP 9.x: обновите свой проект до последней версии AGP 9.x и устраните все существующие предупреждения об устаревании. Как только ваш проект будет работать с версией 9.x без предупреждений и без зависимости от
android.newDsl=falseилиandroid.builtInKotlin=false, переход на версию 10.0 будет плавным. - Проверьте сторонние плагины Gradle: убедитесь, что сторонние плагины обновлены до версий, совместимых с AGP 10.0. Плагины, по-прежнему использующие устаревшие типы расширений, будут вызывать ошибки сборки, такие как
ClassCastException: ... cannot be cast to class BaseExtension. - Используйте официальные рецепты миграции: для сложных примеров миграции из реальной жизни и сравнительных расчетов обратитесь к официальному репозиторию gradle-recipes на GitHub .
Здесь представлено сравнение «до» и «после», демонстрирующее переход от немедленного запроса устаревших вариантов к ленивой настройке вариантов с помощью androidComponents {} :
Ранее: устаревший вариант API (удален в AGP 10.0)
// Eager evaluation using the legacy Variant API
android {
applicationVariants.all { variant ->
if (variant.buildType.name == "release") {
// Eagerly queries and modifies properties during evaluation
}
}
}
После: Современный вариант API ( androidComponents {} )
// Lazy, Configuration Cache compatible Variant API
androidComponents {
onVariants(selector().withBuildType("release")) { variant ->
// Safely and lazily configures properties
}
}
Как проверить работу AGP 10.0 в AGP 9.x
Вам не нужно ждать выхода AGP 10.0, чтобы начать тестирование его поведения при сборке и проверку совместимости. При работе с любой версией AGP 9.x вы можете явно обеспечить поведение AGP 10.0, убедившись, что в вашем gradle.properties отключены все параметры отказа от использования AGP и установлены следующие флаги строгого поведения:
# Enforce modern DSL and Variant API interfaces exclusively
android.newDsl=true
# Enforce built-in Kotlin support without optional opt-out
android.builtInKotlin=true
Установив параметры android.newDsl=true и android.builtInKotlin=true , вы можете убедиться, что ваша пользовательская логика сборки и сторонние плагины полностью совместимы со строгими требованиями API AGP 10.0.
Выборочное исключение из подпроекта во время миграции
Если вы хотите включить android.newDsl=true глобально для всего проекта, чтобы протестировать современное поведение, но вам нужно больше времени для миграции отдельных подпроектов, вы можете выборочно отключить отдельные модули, начиная с AGP 9.4.0-alpha04. Добавьте android.newDsl.optOut в gradle.properties указав пути к проекту:
# Enable modern DSL globally across the build
android.newDsl=true
# Selectively opt out specific sub-projects that still require legacy DSL APIs
android.newDsl.optOut=:lib
Выборочное отключение встроенных функций Kotlin для каждого модуля
Если вы хотите включить встроенный Kotlin глобально для всего проекта ( android.builtInKotlin=true ), но вам нужно больше времени для миграции отдельных подпроектов с kotlin-android (или для модулей без кода Kotlin), настройте эти модули на уровне DSL, а не на уровне проекта. Установите enableKotlin = false в файле сборки модуля:
android {
enableKotlin = false
}
Процесс обратной связи и сообщения об ошибках
Мы хотим убедиться, что новый API вариантов поддерживает необходимые вам сценарии использования. Если при переходе со старых API вы столкнетесь с проблемой, когда новый API вариантов не сможет удовлетворить ваши потребности, выполните следующие шаги, чтобы оставить отзыв:
- Проверьте существующие элементы: Во-первых, проверьте глобальную систему отслеживания ошибок API вариантов AGP 10.0, чтобы узнать, известна ли уже проблема, препятствующая миграции, и подтвердите её наличие (+1).
- Сообщите об отсутствии API: если ваш сценарий использования уникален, отправьте запрос на добавление новой функции, используя наш специальный шаблон API для вариантов, чтобы мы могли провести расследование и оказать помощь.
(Предварительно) Доступ к закрытым внутренним классам AGP закрыт.
Теперь зависимость от артефакта gradle скрывает все внутренние классы и предоставляет доступ к компиляции только для интерфейсов и классов, доступных в артефакте gradle-api . Это влияет на компиляцию плагинов.
Добавить зависимость для доступа к внутренним классам вручную невозможно.
AGP 9.0 (январь 2026 г.)
Новые API-интерфейсы для работы с различными вариантами кода являются стабильными, старые API-интерфейсы устарели.
API-интерфейсы вариантов , находившиеся в стадии разработки в версиях 4.1 и 4.2, теперь стабильны и находятся в репозитории gradle-api . Предыдущие интерфейсы и классы, использовавшиеся в старом API-интерфейсе вариантов, теперь устарели и требуют явного согласия на их использование.
Новые DSL-интерфейсы стабильны, старые устарели.
Интерфейсы DSL , находившиеся в стадии разработки в версиях 4.1, 4.2 и 7.0, теперь стабильны и находятся в репозитории gradle-api . Предыдущие интерфейсы и классы, использовавшиеся в DSL, устарели и требуют явного согласия на их использование.
Доступны и частные внутренние занятия по программе AGP.
Внутренние закрытые классы AGP, расположенные в других артефактах, по-прежнему доступны во время компиляции файлов сборки и плагинов, но мы не рекомендуем их использовать, поскольку они могут в любой момент измениться таким образом, что это приведет к несовместимости.