Плагин Android Gradle 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 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] Ошибка проверки класса Hard в 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 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 по умолчанию не создаёт SoftwareComponent. Вместо этого AGP создаёт SoftwareComponent только для вариантов, настроенных для публикации с использованием 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.0
Исправленные проблемы | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Плагин Android Gradle |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Дексер (D8) |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Линт |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Интеграция Lint |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Усадочный аппарат (R8) |
|
Плагин Android Gradle 8.0.1
Исправленные проблемы | ||||
---|---|---|---|---|
Усадочный аппарат (R8) |
|
Плагин Android Gradle 8.0.2
Исправленные проблемы | |||||
---|---|---|---|---|---|
Усадочный аппарат (R8) |
|