Android Gradle plugin 8.0.0 — это крупный релиз, включающий множество новых функций и улучшений.
Совместимость
| Минимальная версия | Версия по умолчанию | Примечания | |
|---|---|---|---|
| Грэдл | 8.0 | 8.0 | Для получения более подробной информации см. раздел «Обновление Gradle» . |
| Инструменты сборки SDK | 30.0.3 | 30.0.3 | Установите или настройте инструменты сборки SDK. |
| НДК | Н/Д | 25.1.8937393 | Установите или настройте другую версию NDK. |
| JDK | 17 | 17 | Для получения более подробной информации см. раздел «Настройка версии JDK» . |
Выпуск обновлений
Ниже приведён список выпущенных исправлений для Android Gradle Plugin 8.0.
Android Gradle Plugin 8.0.2 (май 2023 г.)
Список исправленных ошибок в AGP 8.0.2 см. в разделе закрытых проблем Android Studio 2022.2.1 .
Android Gradle Plugin 8.0.1 (май 2023 г.)
Это небольшое обновление включает в себя следующие исправления ошибок:
| Исправлены ошибки | |
|---|---|
Ошибка: "В таблице отсутствует требование к версии с указанным идентификатором" после обновления 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 .
Изменения, нарушающие обратную совместимость: значения параметров сборки по умолчанию.
Начиная с 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 shrinker» . |
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 по умолчанию не создаются компоненты программного обеспечения. Вместо этого AGP создает компоненты программного обеспечения только для вариантов, которые настроены на публикацию с использованием DSL публикации. |
Новый стабильный флаг для профиля выполнения
AGP включает новый флаг android.settings.executionProfile . Используйте этот флаг, чтобы переопределить профиль выполнения по умолчанию из расширения SettingsExtension . Для получения дополнительной информации см. документацию по плагину настроек .
Чтобы ознакомиться с экспериментальными флагами, см. примечания к предварительной версии .
В Kotlin не поддерживается ленивое присваивание свойств.
Если вы используете Kotlin DSL из Gradle для своих скриптов сборки, обратите внимание, что Android Studio и AGP 8.0 не поддерживают экспериментальное присваивание свойств с помощью оператора = . Для получения дополнительной информации об этой функции см. примечания к выпуску и документацию .
Категории задач Build Analyzer
Начиная с 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
Для работы AGP 8.0 требуется JDK 17.
При использовании плагина Android Gradle Plugin 8.0 для сборки приложения теперь требуется JDK 17 для запуска Gradle. 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.2
| Исправлены ошибки | |||||
|---|---|---|---|---|---|
| Уменьшитель (R8) |
| ||||
Плагин Android Gradle 8.0.1
| Исправлены ошибки | ||||
|---|---|---|---|---|
| Уменьшитель (R8) |
| |||
Плагин Android Gradle 8.0.0
| Исправлены ошибки | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Плагин Android Gradle |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Дексер (D8) |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Ворс |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Интеграция Lint |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Уменьшитель (R8) |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||