Плагин Android Gradle 9.2.0 (апрель 2026 г.)

Плагин Android Gradle 9.2 – это второстепенный выпуск, в который входит ряд новых функций и улучшений.

Совместимость

Максимальный уровень API, поддерживаемый плагином Android Gradle 9.2, – 37.0. Другая информация о совместимости:

Минимальная версия Версия по умолчанию Примечания
Gradle 9.4.1 9.4.1 Подробнее о том, как обновить Gradle…
Инструменты сборки SDK 36.0.0 36.0.0 Установите или настройте инструменты сборки SDK.
NDK Н/Д 28.2.13676358 Установите или настройте другую версию NDK.
JDK 17 17 Подробнее о том, как задать версию JDK…
Плагин Kotlin Gradle (KGP) 2.2.10 2.2.10 Подробнее о зависимости от плагина Kotlin Gradle во время выполнения…

Единые отчеты о покрытии и тестировании

В AGP 9.2.0-alpha07 добавлены задачи для создания HTML-панелей, на которых собраны результаты тестирования и данные о покрытии для разных типов тестов (модульных и инструментальных), модулей и вариантов сборки. Подробнее о том, как создавать единые отчеты о покрытии кода и просматривать единые отчеты о тестировании…

Изменения в R8

В AGP 9.2.0 включены следующие изменения R8:

Более строгая семантика -keepattributes для сохранения невидимых во время выполнения аннотаций

Аннотации, которые не видны во время выполнения, нельзя прочитать во время выполнения. Поэтому D8 безусловно удаляет невидимые во время выполнения аннотации, и это нельзя изменить.

Для совместимости с ProGuard R8 поддерживает вывод невидимых во время выполнения аннотаций. Но при компиляции в DEX аннотации, невидимые во время выполнения, обычно не сохраняются. Однако для R8 обычно используется удобное правило -keepattributes *Annotation* (напрямую или косвенно, через правила сохранения для потребителей), чтобы сохранить аннотации, видимые во время выполнения. К сожалению, при этом также сохраняются невидимые аннотации времени выполнения.

Чтобы устранить эту проблему и обеспечить соответствие поведению D8, -keepattributes шаблоны с подстановочными знаками больше не соответствуют RuntimeInvisibleAnnotations, RuntimeInvisibleParameterAnnotations и RuntimeInvisibleTypeAnnotations. В результате аннотации, невидимые во время выполнения, будут сохранены, только если имя атрибута указано явно без подстановочных знаков.

Ни одно из следующих правил не будет сохранять невидимые во время выполнения аннотации:

-keepattributes *
-keepattributes *Annotation*
-keepattributes *Invisible*

Чтобы сохранить невидимые во время выполнения аннотации, используйте следующее правило:

-keepattributes RuntimeInvisibleAnnotations,
                RuntimeInvisibleParameterAnnotations,
                RuntimeInvisibleTypeAnnotations

Поддержка отрицательных имен в правилах для участников

Язык конфигурации был расширен, и теперь вы можете сопоставлять шаблоны имен участников с отрицанием.

Например, чтобы найти все методы, которые не заканчиваются на "ForTesting", используйте следующее правило:

-keepclassmembers class com.example.MyClass {
  *** !*ForTesting(...);
}

Шаблоны имен участников также можно отрицать в предварительном условии правил -if. Если шаблон имени исключенного участника содержит подстановочные знаки, на них нельзя ссылаться в последующем правиле -if.

Устраненные проблемы

Плагин Android Gradle 9.2.1

Устраненные проблемы
Плагин Android Gradle
java.lang.ClassNotFoundException: Didn't find class "com.android.tools.r8.RecordTag" after upgrading gradle to 9.2.0 (java.lang.ClassNotFoundException: не удалось найти класс "com.android.tools.r8.RecordTag" после обновления Gradle до версии 9.2.0)

Плагин Android Gradle 9.2.0

Устраненные проблемы
Плагин Android Gradle
Предупреждать пользователей, если они используют commonTest, но забывают про withHostTestBuilder
[fused lib - public] OkHttp includes sources
Невозможно запустить androidDeviceTest с плейсхолдерами манифеста в библиотеке (AGP 9.0.0 с плагином com.android.kotlin.multiplatform.library)
AGP должен предупреждать, если у пользователя есть src/androidDeviceTest/java с отключенным Java
AGP 9.0 No androidComponents.onVariant equivalent for applicationVariants.all.mergeAssetsProvider
Файлы `*.xml.flat` содержат абсолютные пути к файлам.
R8D8ThreadPoolBuildService не зарегистрирован
Сбой JdkImageTransform с JDK 26
Автоматическое кодирование minAgpVersion в метаданных AAR в AGP 10.0
Как переименовать APK с помощью нового AGP DSL
Ошибка при доступе к bootClasspath (не при оценке) IllegalStateException: targetCompatibility is not yet finalized
Набор правил keepRules не работает для библиотек
Встраивание декларации о совместимости с CC в AGP
Обновите зависимость плагина Kotlin Gradle до версии 2.3.10
Разрешить использовать для тестов более новую версию compileSdk, чем для основного кода
Lint
Проверка орфографии в сообщении
Окно контекста в отчетах Lint SARIF усечено из-за застрявшего указателя смещения в `SarifReporter.kt`
В клиенте Lint Gradle отсутствует важная функция, из-за чего он работает ненадежно
Ошибка Lint, когда удаление неиспользуемых ресурсов отключено
AGP 9 Lint сообщает об ошибке WrongConstant при использовании вложенных констант IntDef
Ошибка Lint, когда удаление неиспользуемых ресурсов отключено
Интеграция с Lint
Android Lint не работает с пользовательскими проверками Lint, скомпилированными в байт-код Java 21
Задачи Lint Gradle игнорируют флаг --quiet
Shrinker (R8)
Таргетинг на Java 11, похоже, приводит к сбоям в работе d8