Плагин Android Gradle 8.0.0 (апрель 2023 г.)

Плагин Android Gradle 8.0.0 — это основная версия, включающая множество новых функций и улучшений.

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

Минимальная версия Версия по умолчанию Примечания
Градл 8.0 8.0 Чтобы узнать больше, см. обновление Gradle .
Инструменты сборки SDK 30.0.3 30.0.3 Установите или настройте инструменты сборки SDK.
НДК Н/Д 25.1.8937393 Установите или настройте другую версию NDK.
ЯДК 17 17 Дополнительные сведения см. в разделе Настройка версии JDK .

Выпуски патчей

Ниже приведен список выпусков исправлений для плагина Android Gradle 8.0.

Плагин Android Gradle 8.0.2 (май 2023 г.)

Список ошибок, исправленных в AGP 8.0.2, см. в разделе закрытые проблемы Android Studio 2022.2.1 .

Плагин Android Gradle 8.0.1 (май 2023 г.)

Это незначительное обновление включает в себя следующие исправления ошибок:

Исправлены проблемы
Ошибка: «Нет VersionRequirement с данным идентификатором в таблице» после обновления AGP 7.2.2 -> 7.4.0
R8 NullPointerException в markTypeAsLive AGP 7.4.1
[R8 4.0.53] Ошибка жесткой проверки класса на Android 11

Критическое изменение: в сценарии сборки на уровне модуля требуется пространство имен.

Вы должны установить пространство имен в файле build.gradle.kts уровня модуля, а не в файле манифеста. Вы можете начать использовать свойство DSL namespace , начиная с AGP 7.3. Дополнительные сведения см. в разделе Установка пространства имен .

При переходе на пространство имен DSL имейте в виду следующие проблемы:

  • Предыдущие версии AGP в некоторых случаях неправильно выводят тестовое пространство имен из основного пространства имен или идентификатора приложения. Помощник по обновлению AGP блокирует обновление, если обнаруживает, что основное пространство имен вашего проекта и тестовое пространство имен совпадают. Если обновление заблокировано, вам необходимо вручную изменить testNamespace и соответствующим образом изменить исходный код.
  • После изменения пространства имен теста ваш код может скомпилироваться, но инструментированные тесты завершится сбоем во время выполнения. Это может произойти, если исходный код инструментального теста ссылается на ресурс, определенный как в источнике androidTest так и в источнике приложения.

Дополнительную информацию см. в выпуске №191813691, комментарий №19 .

Критические изменения: значения параметров сборки по умолчанию

Начиная с AGP 8.0, значения по умолчанию для этих флагов были изменены для повышения производительности сборки. Чтобы получить помощь в настройке кода для поддержки некоторых из этих изменений, используйте Помощник по обновлению AGP ( Инструменты > Помощник по обновлению AGP ). Помощник по обновлению поможет вам обновить код для соответствия новому поведению или установить флаги для сохранения предыдущего поведения.

Флаг Новое значение по умолчанию Предыдущее значение по умолчанию Примечания
android.defaults.buildfeatures.buildconfig false true AGP 8.0 по умолчанию не генерирует BuildConfig . Вам необходимо указать эту опцию с помощью DSL в тех проектах, где она вам нужна.
android.defaults.buildfeatures.aidl false true AGP 8.0 по умолчанию не включает поддержку AIDL. Вам необходимо указать эту опцию с помощью DSL в тех проектах, где она вам нужна. Этот флаг планируется удалить в AGP 9.0.
android.defaults.buildfeatures.renderscript false true AGP 8.0 по умолчанию не включает поддержку RenderScript. Вам необходимо указать эту опцию с помощью DSL в тех проектах, где она вам нужна. Этот флаг планируется удалить в AGP 9.0.
android.nonFinalResIds true false AGP 8.0 по умолчанию генерирует классы R с нефинальными полями.
android.nonTransitiveRClass true false AGP 8.0 генерирует классы R только для ресурсов, определенных в текущем модуле.
android.enableR8.fullMode true false AGP 8.0 по умолчанию включает полный режим R8. Подробнее см. Полный режим R8 .

Критические изменения: принудительные значения параметров сборки.

Начиная с AGP 8.0, вы больше не можете изменять значения этих флагов. Если вы укажете их в файле gradle.properties , значение игнорируется, и AGP печатает предупреждения.

Флаг Принудительное значение Примечания
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0 выдает предупреждение, если обнаруживает разрешение конфигурации на этапе настройки, поскольку это отрицательно влияет на время настройки Gradle.
android.r8.failOnMissingClasses true AGP 8.0 не работает при сборке, использующей R8, если отсутствуют классы для обеспечения лучшей оптимизации DEX. Чтобы решить эту проблему, вам необходимо добавить недостающие библиотеки или -dontwarn Keep правила. Дополнительные сведения см. в разделе «Отсутствующие предупреждения о классе в термоусадке R8» .
android.testConfig.useRelativePath true Если включена поддержка использования ресурсов, активов и манифестов Android в модульных тестах, AGP 8.0 создает файл test_config.properties , содержащий только относительные пути. Это гарантирует, что модульные тесты Android всегда смогут использовать кеш сборки Gradle.
android.useNewJarCreator true AGP использует библиотеку Zipflinger при создании файлов JAR для повышения производительности сборки.
android.bundletool.includeRepositoriesInDependencyReport true Если добавление информации о зависимостях SDK в AAB и APK включено, AGP 8.0 также добавляет к этой информации список репозиториев проектов. Дополнительные сведения см. в разделе Информация о зависимостях для Play Console .
android.enableArtProfiles true Базовые профили теперь генерируются всегда. Подробности см. в разделе «Базовые профили» .
android.enableNewResourceShrinker true По умолчанию используйте новую реализацию шинкера ресурсов. Новое средство сжатия ресурсов включает поддержку динамических функций.
android.enableSourceSetPathsMap true Используется для вычисления сопоставлений относительных путей к ресурсам, поэтому сборки Gradle чаще обновляются.
android.cacheCompileLibResources true Ресурсы скомпилированной библиотеки теперь можно кэшировать по умолчанию, поскольку Gradle отслеживает файлы ресурсов относительно местоположения проекта. Требуется, чтобы android.enableSourceSetPathsMap был включен.
android.disableAutomaticComponentCreation true AGP 8.0 по умолчанию не создает SoftwareComponent. Вместо этого AGP создает SoftwareComponents только для вариантов, настроенных для публикации с использованием публикующего DSL.

Новый стабильный флаг для профиля выполнения.

AGP включает новый флаг android.settings.executionProfile . Используйте этот флаг, чтобы переопределить профиль выполнения по умолчанию из SettingsExtension . Чтобы узнать больше, смотрите документацию плагина настроек .

Чтобы просмотреть экспериментальные флаги, ознакомьтесь с примечаниями к выпуску предварительной версии .

Отложенное присвоение свойств Kotlin не поддерживается

Если вы используете Kotlin DSL Gradle для своих сценариев сборки, обратите внимание, что Android Studio и AGP 8.0 не поддерживают экспериментальное назначение свойств с помощью оператора = . Дополнительные сведения об этой функции см. в примечаниях к выпуску и документации .

Категории задач анализатора сборки

Начиная с Android Studio Flamingo, в Build Analyzer появилось новое представление по умолчанию для задач, влияющих на продолжительность сборки. Если в вашем проекте используется AGP 8.0 или выше, вместо отображения задач по отдельности Build Analyzer группирует их по категориям. Например, задачи, специфичные для ресурсов Android, Kotlin или Dexing, группируются вместе, а затем сортируются по продолжительности сборки. Это позволяет легко узнать, какая категория оказывает наибольшее влияние на время сборки. При раскрытии каждой категории отображается список соответствующих задач. Чтобы отображать задачи индивидуально, без группировки, используйте раскрывающийся список Группировать по .

Категории задач анализатора сборки.

Новый плагин настроек

В AGP 8.0.0-alpha09 представлен новый плагин настроек. Плагин настроек позволяет централизовать глобальные конфигурации — конфигурации, которые применяются ко всем модулям — в одном месте, поэтому вам не нужно копировать и вставлять конфигурации в несколько модулей. Кроме того, вы можете использовать плагин настроек для создания профилей выполнения инструмента или различных инструкций по запуску инструмента и переключения между ними.

Чтобы использовать плагин настроек, примените его в файле settings.gradle :

apply plugin 'com.android.settings'

Централизуйте глобальные конфигурации

Чтобы настроить глобальные конфигурации, используйте новый блок android в файле settings.gradle . Вот пример:

android {
  compileSdk 31
  minSdk 28
  ...
}

Профили выполнения инструмента

Плагин настроек также позволяет создавать профили выполнения для некоторых инструментов. Профиль выполнения определяет, как запускается инструмент; вы можете выбрать разные профили выполнения в зависимости от среды. В профиле выполнения вы можете установить аргументы JVM для инструмента и настроить его для запуска в отдельном процессе. В настоящее время поддерживается только инструмент R8 .

Создайте профили выполнения и установите профиль выполнения по умолчанию в файле settings.gradle , как показано в следующем примере:

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

Чтобы переопределить профиль по умолчанию, выберите другой профиль, используя свойство android.experimental.settings.executionProfile в файле gradle.properties :

android.experimental.settings.executionProfile=high

Вы также можете установить это свойство с помощью командной строки, что позволяет настраивать различные рабочие процессы. Например, если у вас есть рабочий процесс непрерывной интеграции, вы можете использовать командную строку для изменения профиля выполнения без необходимости изменения файла settings.gradle :

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

JDK 17 необходим для запуска AGP 8.0.

При использовании плагина Android Gradle 8.0 для создания приложения для запуска Gradle теперь требуется JDK 17. Android Studio Flamingo включает в себя JDK 17 и настраивает Gradle для его использования по умолчанию. Это означает, что большинству пользователей Android Studio не нужно вносить какие-либо изменения в конфигурацию своих проектов.

Если вам нужно вручную установить версию JDK, используемую AGP, внутри Android Studio, вам необходимо использовать JDK 17 или выше.

При использовании AGP независимо от Android Studio обновите версию JDK, установив переменную среды JAVA_HOME или параметр командной строки -Dorg.gradle.java.home в каталог установки JDK 17.

Исправлены проблемы

Плагин Android Gradle 8.0.0

Исправленные проблемы
Плагин Android Gradle
Нестабильный сбой сборки в задаче MergeResources
JavaPluginConvention и HasConvention устарели.
Неправильное и противоречивое расположение файла для нового API преобразования.
Плагин Android Gradle не должен использовать устаревшую функцию GUtil.toWords(string)
Плагин Android Gradle не должен использовать устаревшую функцию ConfigurationUtil.configure(closure, target)
Обновите тесты AGP для использования KGP 1.7.20-Beta.
Ошибка Gradle 7.4 (не удалось создать экземпляр AnalyticsService)
Новая «неизвестная константа перечисления» из javac в AGP 7.4.0-alpha09.
Конфигурация MergeGeneratedProguardFilesCreationAction выполняется медленно даже при включенном кэшировании конфигурации.
[AGP] Добавление созданного исходного каталога в модель IDE (вариант API)
JavaPluginConvention и HasConvention устарели.
Не добавляйте игнорируемые предупреждения в R8 по умолчанию.
Предупреждать, когда файлы proguard не существуют
AGP 7.3.0 нарушает синхронизацию Gradle для проектов платформы Gradle
библиотека apksig: ApkVerifier$Result.getV4SchemeSigners() помечен как частный
Прекратите создавать конфигурацию androidJacocoAnt, если покрытие не включено.
Использование @IntDef в библиотечном компоненте не создает файл annotations.zip в aar.
Не удалось найти общий супертип для и
Добавьте версию свойства gradle LINT_PRINT_STACKTRACE=true.
Устаревшие сборные артефакты упаковываются в AAR
Перейдите из целевого свойства в свойство выводаLocation, чтобы устранить предупреждение об устаревании и подготовиться к Gradle 9.0.
Учитывайте флаг --release при настройке задачи JavaCompile.
[AGP-7.3.0-beta03] ShrinkResourcesNewShrinkerTask завершается с ошибкой, если после объявления XML имеется пустая строка.
Цель lintVital запускается по умолчанию в отладочном варианте
Предупреждать, когда файлы proguard не существуют
AGP пытается добавить kotlinOptions.freeCompilerArgs на этапе выполнения задачи.
Ошибка синхронизации Gradle: Ошибка синхронизации: причина неизвестна
DependencyReportTask несовместим с кешем конфигурации.
Переопределение ресурсов с помощью resValue в build.gradle приводит к ошибке: повторяющиеся ресурсы.
Тип сборки «отладка» имеет ключ подписи по умолчанию, другие — нет
Использование динамических функций и сокращение ресурсов приводят к сбою во время выполнения.
Тип сборки «отладка» имеет ключ подписи по умолчанию, другие — нет
сгенерированный исходный каталог указан как каталог Java в основном поставщике исходного кода модели lint
Gradle 8.0-milestone-2 вызывает исключение в AGP
Оптимизация слияния манифестов для приложений и библиотеки.
Добавьте gradle-settings-api в генерацию javadoc.
Новая «неизвестная константа перечисления» из javac в AGP 7.4.0-alpha09.
AGP 7.4.0-alpha09 генерирует сборки, которые не загружаются в Firebase App Distribution.
lint.xml в модулях не учитывается для АКТУАЛЬНОЙ проверки задач lint.
Плагин Android Gradle 7.0+ и проблема с тестами Android: невозможно найти ресурс: id
configureCMakeDebug периодически аварийно завершает работу с исключением нулевого указателя
IllegalAccessError проект обновления до AS2022.2.1.5, FireBasePerfPlugin
Синхронизация завершается с ошибкой: «Коллекция не содержит элементов, соответствующих предикату».
API инструментария не преобразует зависимости локальных файлов.
Ошибка «AnnotationProcessorOptions.arguments запрашивается» при обновлении до версии 7.4 Beta 1.
Переместите общедоступные плагины Gradle в gradle-api и удалите BasePlugin.getExtension.
r8.jvmArgs не привыкаешь
JDK17 как минимальная версия, необходимая для AGP
AGP 8.0.0 A8 нарушает базовые профили
Измените «compileSdkVersion» на «compileSdk» в сообщении CheckAarMetadataTask в AGP 8.0.
AGP 7.4.0-rc01 нарушает Variant API: «Запрос сопоставленного значения карты (поставщик (java.util.Set)) до завершения задачи '...' не поддерживается»
`com.android.build.gradle.tasks.ShaderCompile` проблемы с кешем конфигурации
Добавление ресурсов Java с помощью API AGP нарушает кеш конфигурации.
Плагин Lint не является частью gradle-api
DexingFileDependencyTask.outputKeepRules — это каталог, но помечен как OutputFile.
Обновление до AGP 7.4 приводит к ошибке StackOverflowError.
ProcessDebugUnitTestManifest не работает с заполнителями манифеста для вариантов теста
Lint получает доступ к информации исходных наборов без зависимостей
Ошибка сборки относится к уровню API 34, которого не существует.
«Мы рекомендуем использовать более новый плагин Android Gradle», если более новый плагин отсутствует.
android.injected.testOnly=false не работает
Дексер (D8)
Ошибка слияния Dex, связанная с глобальной синтетикой, после обновления AS Canary с 6 до 7
Обновите библиотеку метаданных Kotlin до версии 0.6.0.
Обходной путь для JDK-8272564, по-видимому, требуется на уровне API 28-30.
Ворс
Проверка ResourceType lint не работает для источников Kotlin
VersionChecks не обрабатывает проверки диапазона Kotlin
Ложное срабатывание для InlinedApi при упаковке
Ложное срабатывание Lint в отношении openInputStream
[BuildTool/Lint] ChecksSdkIntAtLeast свойство конструктора
Lint: слияние PartialResults работает неправильно
Android Studio неправильно помечает указанную версию как устаревшую.
AndroidDeprecationInspection.DeprecationFilter EP никогда не регистрируется в файле android-plugin.xml
Объяснение проверки ворса AccessibilityDetector устарело
Проверки Lint SDK_INT должны понимать временные локальные переменные.
Ошибка, когда TestMode.TYPE_ALIAS заменяет тип функции псевдонимом типа
Ошибка: когда ObjectAnimator создается вне текущего блока кода, появляются ложные предупреждения о том, что он не запускается #38
Lint: NPE из-за запроса экземпляра приложения в режиме mergeOnly.
Правило lint NonConstantResourceId не может обнаружить возможность назначения постоянных значений из идентификатора ресурса
не отображается ошибка в идентификаторе представления
Неспособность десериализовать кэш ресурсов lint приводит к ошибке lint (но должно быть предупреждением)
AGP Flamingo Alpha 8 Lint NewApi Desugar Регрессия
TypedArray # close (API 31) не отключен, но AS не отображает предупреждение при использовании в попытке с ресурсами
Lint не проверяет допустимые приведения для получателей вызовов
Lint проверяет безопасное приведение типов только для непосредственно реализованных интерфейсов, а не унаследованных.
Интеграция Линта
Базовый файл в настоящее время является входом и выходом задач Lint.
Шринкер (R8)
Ошибка NPE/утверждения в верификаторе кадра CF
Регрессия после удаления кэша поиска полей
`:app:minifyVariantWithR8` выдает исключение NullPointerException в AGP 7.4.0-beta02.
R8: ClassNotFoundException при -allowaccessmodification
Добавить поддержку получателей контекста в метаданных.
java.lang.VerifyError: верификатор отклонил класс androidx.compose.ui.graphics.colorspace.o: void androidx.compose.ui.graphics.colorspace.o. (java.lang.Object) не удалось проверить: void androidx.compose.ui.graphics.colorspace.o. (java.lang.Object): [0x0] не может получить доступ к полю экземпляра java.lang.Object androidx.compose.ui.graphics.colorspace.na из объекта типа Точная ссылка: androidx.compose.ui.graphics.colorspace.o
AGP 7.4.0/7.3.1 — попытка поставить действие в очередь в неперемещаемом рабочем списке очереди
Минимизация кода Renderscript: огромное падение производительности при обновлении AGP с 7.3.1 до 7.4.0

Плагин Android Gradle 8.0.1

Исправленные проблемы
Шринкер (R8)
Ошибка: «Нет VersionRequirement с данным идентификатором в таблице» после обновления AGP 7.2.2 -> 7.4.0
R8 NullPointerException в markTypeAsLive AGP 7.4.1
[R8 4.0.53] Ошибка жесткой проверки класса на Android 11

Плагин Android Gradle 8.0.2

Исправленные проблемы
Шринкер (R8)
R8 завершается с ошибкой во время сборки Compose с исключением ArrayIndexOutOfBoundsException
VerifyError: верификатор отклонил класс при использовании R8 с Kotlin 1.8.20
R8 на AGP 8 ломает сервис Google Fit
Включение информации исходного файла с остаточными именами, которые перекрывают входные имена, отображается неправильно.