Плагин Android Gradle 4.2.0 (март 2021 г.)
Совместимость
| Минимальная версия | Версия по умолчанию | Примечания | |
|---|---|---|---|
| Gradle | 6.7.1 | Н/Д | Подробнее о том, как обновить Gradle… |
| Инструменты сборки SDK | 30.0.2 | 30.0.2 | Установите или настройте инструменты сборки SDK. |
| NDK | Н/Д | 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
Новый компилятор ресурсов JVM в плагине Android Gradle 4.2 заменяет части компилятора ресурсов AAPT2, что может повысить производительность сборки, особенно на компьютерах с Windows. Новый компилятор ресурсов JVM включен по умолчанию.
Поддержка подписи версий 3 и 4
Плагин Android Gradle 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 версии 4 позволяет быстро развертывать большие APK-файлы с помощью инкрементной установки APK через ADB в Android 11. Этот новый флаг отвечает за подписание APK-файлов в процессе развертывания.
Как настроить подписание приложений для каждого варианта
Теперь в плагине Android Gradle можно включать и отключать подписание приложений для каждого варианта.
В этом примере показано, как настроить подписание приложения для каждого варианта с помощью метода onVariants() в Kotlin или Groovy:
androidComponents {
onVariants(selector().withName("fooDebug")) {
signingConfig {
enableV1Signing false
enableV2Signing true
}
}
}
Новое свойство Gradle:
android.native.buildOutput
Чтобы уменьшить количество сообщений в выходных данных сборки, AGP 4.2 фильтрует сообщения из сборок C/C++, в которых используются CMake и ndk-build, и по умолчанию показывает только выходные данные компилятора C/C++. Ранее для каждого созданного файла генерировалась строка вывода, в результате чего появлялось большое количество информационных сообщений.
Если вы хотите видеть все выходные данные 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, вы можете изменить JDK, используемый для запуска Gradle, в диалоговом окне Project Structure (Структура проекта). Изменение этого параметра повлияет только на JDK, используемую для запуска Gradle, но не на JDK, используемую для запуска Studio.
Совместимость Studio с плагином Android Gradle (AGP)
Android Studio 4.2 может открывать проекты, в которых используется AGP 3.1 и более поздних версий, если AGP работает с Gradle 4.8.1 и более поздних версий. Подробнее о совместимости 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 для упаковки сжатых библиотек C/C++
Мы рекомендуем упаковывать библиотеки C/C++ без сжатия, поскольку это позволяет уменьшить размер приложения при установке и скачивании, а также ускорить его загрузку. Однако, если вы хотите, чтобы плагин Android Gradle упаковывал сжатые библиотеки C/C++ при сборке приложения, задайте для параметра useLegacyPackaging значение true в файле build.gradle приложения:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
Флаг useLegacyPackaging заменяет атрибут манифеста extractNativeLibs. Дополнительную информацию можно найти в примечаниях к выпуску Нативные библиотеки по умолчанию упаковываются без сжатия.