Плагин 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.