Плагин Android Gradle 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
Новый компилятор ресурсов JVM в инструменте плагина Android Gradle 4.2 заменяет части компилятора ресурсов AAPT2 , что потенциально повышает производительность сборки, особенно на компьютерах с Windows. Новый компилятор ресурсов JVM включен по умолчанию.
Теперь поддерживается подпись v3 и v4.
Плагин 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 v4 позволяет быстро развертывать большие APK с помощью установки ADB Incremental APK в 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. В предыдущих выпусках JDK 8 входил в состав Studio. Однако в версии 4.2 вместо этого теперь включен JDK 11. При использовании нового встроенного JDK для запуска Gradle это может привести к некоторой несовместимости или повлиять на производительность JVM из-за изменений в сборщике мусора. Эти проблемы описаны ниже.
Примечание. Хотя мы рекомендуем запускать Gradle с JDK 11, можно изменить JDK, используемый для запуска Gradle, в диалоговом окне «Структура проекта» . Изменение этого параметра изменит только 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
. Дополнительную информацию см. в примечаниях к выпуску. Собственные библиотеки по умолчанию упаковываются в несжатом виде .