Android Gradle Plugin 4.2.0 (март 2021 г.)
Совместимость
| Минимальная версия | Версия по умолчанию | Примечания | |
|---|---|---|---|
| Грэдл | 6.7.1 | Н/Д | Для получения более подробной информации см. раздел «Обновление Gradle» . |
| Инструменты сборки SDK | 30.0.2 | 30.0.2 | Установите или настройте инструменты сборки SDK. |
| НДК | Н/Д | 21.4.7075529 | Установите или настройте другую версию NDK. |
Новые функции
В этой версии плагина Android Gradle добавлены следующие новые функции.
Язык Java по умолчанию — версия 8.
Начиная с версии 4.2, AGP по умолчанию будет использовать уровень языка Java 8. Java 8 предоставляет доступ к ряду новых языковых возможностей, включая лямбда-выражения, ссылки на методы и статические методы интерфейса. Полный список поддерживаемых функций см. в документации Java 8 .
Чтобы сохранить прежнее поведение, явно укажите Java 7 в файле build.gradle.kts или build.gradle на уровне модуля:
// build.gradle
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}// build.gradle.kts
android {
...
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}Новый компилятор ресурсов JVM
В инструменте Android Gradle plugin 4.2 новый компилятор ресурсов JVM заменяет часть компилятора ресурсов AAPT2 , что потенциально повышает производительность сборки, особенно на машинах с Windows. Новый компилятор ресурсов JVM включен по умолчанию.
Теперь поддерживается подписание версий v3 и v4.
В Android Gradle Plugin 4.2 теперь поддерживаются форматы подписи APK v3 и APK v4 . Чтобы включить один или оба этих формата в сборку, добавьте следующие свойства в файл build.gradle или build.gradle.kts на уровне модуля:
// build.gradle
android {
...
signingConfigs {
config {
...
enableV3Signing true
enableV4Signing true
}
}
}// build.gradle.kts
android {
...
signingConfigs {
config {
...
enableV3Signing = true
enableV4Signing = true
}
}
}Подписание APK v4 позволяет быстро развертывать большие APK-файлы с помощью инкрементальной установки APK через ADB в Android 11. Этот новый флаг берет на себя этап подписания APK-файла в процессе развертывания.
Настройка подписи приложения для каждого варианта
Теперь в плагине Android Gradle можно включать или отключать подпись приложений для каждого варианта.
В этом примере показано, как установить подпись приложения для каждого варианта с помощью метода onVariants() в Kotlin или Groovy:
androidComponents {
onVariants(selector().withName("fooDebug"), {
signingConfig.enableV1Signing.set(false)
signingConfig.enableV2Signing.set(true)
}) Новое свойство Gradle: android.native.buildOutput
Для уменьшения количества лишней информации в выходных данных сборки AGP 4.2 фильтрует сообщения от нативных сборок, использующих CMake и ndk-build , по умолчанию отображая только вывод компилятора C/C++. Ранее для каждого собранного файла генерировалась отдельная строка вывода, что приводило к большому количеству информационных сообщений.
Если вы хотите увидеть весь вывод нативного кода, установите для нового свойства Gradle android.native.buildOutput значение verbose .
Это свойство можно задать либо в файле gradle.properties , либо через командную строку.
gradle.properties
android.native.buildOutput=verbose
Командная строка
-Pandroid.native.buildOutput=verbose
Значение по умолчанию для этого свойства — quiet .
Изменение поведения файлов gradle.properties
Начиная с AGP 4.2, переопределение свойств Gradle из подпроектов стало невозможным. Другими словами, если вы объявите свойство в файле gradle.properties в подпроекте, а не в корневом проекте, оно будет проигнорировано.
Например, в предыдущих версиях AGP считывал значения из <var>projectDir</var>/gradle.properties , <var>projectDir</var>/app/gradle.properties , <var>projectDir</var>/library/gradle.properties и т. д. Для модулей приложений, если одно и то же свойство Gradle присутствовало как в <var>projectDir</var>/gradle.properties , так и <var>projectDir</var>/app/gradle.properties , приоритет отдавался значению из <var>projectDir</var>/app/gradle.properties .
В AGP 4.2 это поведение изменено, и AGP больше не будет загружать значения из gradle.properties в подпроектах (например, <var>projectDir</var>/app/gradle.properties ). Это изменение отражает новое поведение Gradle и поддерживает кэширование конфигурации.
Для получения дополнительной информации о настройке значений в файлах gradle.properties см. документацию Gradle .
Совместимость Gradle и изменения конфигурации
При запуске в Android Studio инструмент сборки Gradle использует встроенный в Studio JDK. В предыдущих версиях в комплект Studio входил JDK 8. Однако в версии 4.2 вместо него теперь входит JDK 11. Использование нового встроенного JDK для запуска Gradle может привести к некоторой несовместимости или повлиять на производительность JVM из-за изменений в сборщике мусора. Эти проблемы описаны ниже.
Примечание: Хотя мы рекомендуем использовать Gradle с JDK 11, изменить используемую для запуска Gradle версию JDK можно в диалоговом окне « Структура проекта» . Изменение этого параметра повлияет только на версию JDK, используемую для запуска Gradle, и не повлияет на версию JDK, используемую для запуска самой Studio.
Совместимость Studio с плагином Android Gradle (AGP)
Android Studio 4.2 может открывать проекты, использующие AGP 3.1 и выше, при условии, что AGP работает с Gradle 4.8.1 и выше. Для получения дополнительной информации о совместимости с Gradle см. раздел «Обновить Gradle» .
Оптимизация сборок Gradle для JDK 11
Это обновление JDK 11 влияет на конфигурацию сборщика мусора JVM по умолчанию, поскольку JDK 8 использует параллельный сборщик мусора, а JDK 11 — сборщик мусора G1 .
Для потенциального повышения производительности сборки мы рекомендуем тестировать сборки Gradle с использованием параллельного сборщика мусора. В gradle.properties установите следующие параметры:
org.gradle.jvmargs=-XX:+UseParallelGCЕсли в этом поле уже заданы другие параметры, добавьте новый параметр:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGCДля измерения скорости сборки при различных конфигурациях см. раздел «Профилирование сборки» .
DEX-файлы в APK-файлах распаковываются, если minSdk = 28 или выше.
Теперь AGP по умолчанию упаковывает DEX-файлы в APK-файлы в несжатом виде, если minSdk = 28 или выше. Это приводит к увеличению размера APK-файла, но уменьшает размер установочного файла на устройстве, а размер загружаемого файла остается примерно тем же.
Чтобы заставить AGP упаковывать файлы DEX в сжатом виде, добавьте следующее в файл build.gradle :
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}Используйте DSL для упаковки сжатых нативных библиотек.
Мы рекомендуем упаковывать нативные библиотеки в несжатом виде, поскольку это приводит к уменьшению размера установочного файла приложения, уменьшению размера загружаемого файла и ускорению загрузки приложения для ваших пользователей. Однако, если вы хотите, чтобы плагин Android Gradle упаковывал сжатые нативные библиотеки при сборке вашего приложения, установите useLegacyPackaging в true в файле build.gradle вашего приложения:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
} Флаг useLegacyPackaging заменяет атрибут манифеста extractNativeLibs . Для получения дополнительной информации см. примечание к выпуску « Нативные библиотеки по умолчанию упаковываются в несжатом виде» .