Плагин 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 |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Дексер (D8) |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ворс |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Интеграция Линта |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Шринкер (R8) |
|
Плагин Android Gradle 8.0.1
Исправленные проблемы | ||||
---|---|---|---|---|
Шринкер (R8) |
|
Плагин Android Gradle 8.0.2
Исправленные проблемы | |||||
---|---|---|---|---|---|
Шринкер (R8) |
|
Плагин 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 |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Дексер (D8) |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ворс |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Интеграция Линта |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Шринкер (R8) |
|
Плагин Android Gradle 8.0.1
Исправленные проблемы | ||||
---|---|---|---|---|
Шринкер (R8) |
|
Плагин Android Gradle 8.0.2
Исправленные проблемы | |||||
---|---|---|---|---|---|
Шринкер (R8) |
|