Android Gradle Plugin 7.1.0 (январь 2022 г.)
Android Gradle plugin 7.1.0 — это крупный релиз, включающий множество новых функций и улучшений.
7.1.3 (апрель 2022 г.)
Это небольшое обновление включает в себя следующие исправления ошибок:
- В R8 обнаружены проблемы с дублированием классов.
Полный список исправлений ошибок, включенных в этот релиз, можно найти в сообщении блога Android Studio Bumblebee Patch 3 .
7.1.2 (февраль 2022 г.)
Это небольшое обновление включает в себя следующие исправления ошибок:
- В Android Gradle Plugin 7.1.0-rc01 не удаётся выполнить преобразование байт-кода ASM во время модульных тестов.
- Синхронизация Gradle завершается ошибкой "Не удалось загрузить класс 'com.android.build.api.extension.AndroidComponentsExtension'".
- Некоторые новые блоки DSL нельзя использовать из Groovy DSL в Android Gradle Plugin 7.0.0.
- Новый API публикации AGP 7.1: созданный jar-файл javadoc не подписывается.
- Класс ClassesDataSourceCache должен использовать последнюю версию Asm.
- В Android Studio BumbleBee не всегда используются последние изменения.
Полный список исправлений ошибок, включенных в этот релиз, можно найти в сообщении блога Android Studio Bumblebee Patch 2 .
7.1.1 (февраль 2022 г.)
Это небольшое обновление совпадает с выпуском патча 1 для Android Studio Bumblebee.
Чтобы ознакомиться со списком исправлений ошибок, включенных в этот релиз, см. сообщение в блоге Android Studio Bumblebee Patch 1 .
Совместимость
| Минимальная версия | Версия по умолчанию | Примечания | |
|---|---|---|---|
| Грэдл | 7.2 | 7.2 | Для получения более подробной информации см. раздел «Обновление Gradle» . |
| Инструменты сборки SDK | 30.0.3 | 30.0.3 | Установите или настройте инструменты сборки SDK. |
| НДК | Н/Д | 21.4.7075529 | Установите или настройте другую версию NDK. |
| JDK | 11 | 11 | Для получения более подробной информации см. раздел «Настройка версии JDK» . |
Теперь задачу анализа кода можно кэшировать.
Задача AndroidLintAnalysisTask теперь совместима с кэшем сборки Gradle . Если вы включите кэш сборки, установив параметр org.gradle.caching=true в файле gradle.properties , задача анализа кода будет получать свои результаты из кэша сборки, когда это возможно.
Задача анализа кода (lint) часто является самым большим узким местом при использовании плагина Android Gradle, поэтому включение кэша сборки повышает скорость сборки при запуске lint во многих ситуациях. Вы должны заметить существенное улучшение производительности, например, если у вас многомодульный проект и вы очищаете каталог сборки перед запуском lint на вашем CI-сервере.
Теперь модули C/C++ могут ссылаться на другие модули C/C++ в том же проекте.
Теперь модуль Gradle для Android с кодом на C/C++ может быть настроен таким образом, чтобы ссылаться на заголовочные файлы и библиотечный код другого модуля Gradle. Для обмена заголовочными файлами и библиотеками между модулями Gradle используется протокол Prefab .
Требования
В качестве модуля -потребителя должен использоваться
CMake, а неndk-build. Поддержка ndk-build потребуется в будущем обновлении NDK. В качестве модуля публикации может использоватьсяCMakeилиndk-build.Модуль, использующий этот модуль, должен включить поддержку
prefabв файлеbuild.gradle.
android {
buildFeatures {
prefab true
}
}- Модуль публикации должен включить
prefabPublishingв файлеbuild.gradle.
android {
buildFeatures {
prefabPublishing true
}
}- Модуль- потребитель должен ссылаться на модуль публикации , добавив строку в блок
dependenciesфайлаbuild.gradle. Например:
dependencies {
implementation project(':mylibrary')
}- Модуль публикации должен предоставлять доступ к пакету с помощью
prefabраздела. Например:
android {
prefab {
mylibrary {
libraryName "libmylibrary"
headers "src/main/cpp/include"
}
}
}- В файле
CMakeLists.txtмодуля-потребителя может использоватьсяfind_package()для поиска пакета, опубликованного модулем-производителем. Например:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
myapplication
mylibrary::mylibrary)- Для всего приложения должна существовать единая библиотека шаблонов (STL) . Таким образом, например, модули, использующие и публикующие код, могут использовать общую библиотеку шаблонов C++.
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared'
}
}
}
}Дополнительные пояснения по настройке собственных потребителей и производителей AAR с помощью AGP см. в разделе «Собственные зависимости с AGP» .
Настройки репозитория в файле settings.gradle
При создании нового проекта в Android Studio Bumblebee, файл build.gradle верхнего уровня содержит блок plugins , за которым следует код для очистки каталога сборки:
plugins {
id 'com.android.application' version '7.1.0-beta02' apply false
id 'com.android.library' version '7.1.0-beta02' apply false
id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
} Настройки репозитория, которые ранее находились в файле build.gradle верхнего уровня, теперь находятся в файле settings.gradle :
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app' Файл build.gradle на уровне модуля не изменился. Поэтому используйте файл build.gradle верхнего уровня и файл settings.gradle для определения конфигураций сборки, которые применяются ко всем модулям в вашем проекте, или к репозиториям и зависимостям, которые применяются к самому Gradle; используйте файл build.gradle на уровне модуля для определения конфигураций сборки, специфичных для конкретного модуля в вашем проекте.
Усовершенствованный механизм сокращения ресурсов
В Android Studio Bumblebee включен улучшенный инструмент для уменьшения размера ресурсов, который помогает сократить размер вашего приложения.
Поддержка приложений с динамическими функциями
В Android Gradle Plugin 7.1.0-alpha09 обновлена стандартная реализация механизма сжатия ресурсов Android. Новая реализация поддерживает сжатие приложений с динамическими функциями.
Экспериментальное дальнейшее уменьшение размера приложения
Новая реализация механизма уменьшения ресурсов может еще больше сократить размер вашего уменьшенного приложения, изменяя таблицу ресурсов для удаления неиспользуемых ресурсов значений и ссылок на неиспользуемые файловые ресурсы. Новый механизм уменьшения ресурсов может полностью удалить неиспользуемые файловые ресурсы, еще больше уменьшив размер вашего приложения. Это поведение пока не включено по умолчанию, но вы можете включить его, добавив экспериментальную опцию android.experimental.enableNewResourceShrinker.preciseShrinking=true в файл gradle.properties вашего проекта.
Пожалуйста, сообщайте о любых проблемах, которые вы обнаружите с новым механизмом сжатия ресурсов или экспериментальным флагом. Для диагностики проблем или в качестве временного решения вы можете вернуться к предыдущей реализации, добавив android.enableNewResourceShrinker=false в gradle.properties вашего проекта. Новый механизм сжатия заменяет неиспользуемые файловые ресурсы немного отличающимися минимальными файлами по сравнению с предыдущим механизмом сжатия ресурсов, но это, как ожидается, не окажет никакого влияния на работу программы во время выполнения.
Устаревшая реализация планируется к удалению в плагине Android Gradle версии 8.0.0.
Создание варианта публикации
Плагин Android Gradle версии 7.1.0 и выше позволяет настраивать, какие варианты сборки публиковать в репозиторий Apache Maven. AGP создает компонент с одним или несколькими вариантами сборки на основе нового DSL для публикации, который можно использовать для настройки публикации в репозиторий Maven. По сравнению с предыдущими версиями, это также позволяет избежать ненужной работы, поскольку компоненты по умолчанию не создаются. Для получения дополнительной информации см. пример кода публикации .
Опубликовать Javadoc JAR
AGP 7.1.0 и выше позволяет генерировать Javadoc из исходных файлов Java и Kotlin, а также публиковать JAR-файлы Javadoc в дополнение к AAR-файлам для библиотечных проектов. Javadoc добавляется в POM-файл и файлы метаданных модулей Gradle {:.external}. Включить эту функцию можно, добавив withJavadocJar() в блок публикации singleVariant или multipleVariants . Для получения дополнительной информации см. пример кода параметров публикации .
Источники публикации: JAR
AGP 7.1.0 и выше позволяет публиковать исходные JAR-файлы Java и Kotlin в дополнение к AAR-файлам для библиотечных проектов. Исходные файлы добавляются в POM-файл и метаданные модулей Gradle {:.external}. Вы можете включить эту функцию, добавив withSourcesJar() в блок публикации singleVariant или multipleVariants . Для получения дополнительной информации см. пример кода параметров публикации .
Изменение семантики блока Lint
Все методы линтинга, которые переопределяют заданный уровень серьезности проблемы — enable , disable / ignore , informational , warning , error , fatal — теперь соблюдают порядок конфигурации. Например, установка уровня серьезности проблемы в finalizeDsl() теперь переопределяет ее отключение в основном DSL. Для получения дополнительной информации см. справочную документацию по блоку lint{} и информацию о процессе сборки Android и точках расширения .
Совместимость с безопасными аргументами навигации
API AGP, от которых зависит плагин Navigation Safe Args Gradle, были удалены. AGP 7.1 не работает с версиями Navigation Safe Args 2.4.0-rc1 или 2.4.0, но будет работать с версиями 2.5.0-alpha01 и 2.4.1. В качестве временного решения вы можете использовать AGP 7.1 со сборкой-снимком Navigation Safe Args, Navigation 2.5.0-SNAPSHOT. Чтобы использовать сборку-снимок, следуйте инструкциям для сборки с идентификатором #8054565.
Кроме того, версии 2.4.1 и 2.5.0 функции Navigation Safe Args больше не будут работать с AGP 4.2; для использования этих версий Safe Args необходимо использовать AGP 7.0 и выше.
Отключить автоматическое создание компонентов
Начиная с AGP 8.0, автоматическое создание компонентов будет отключено по умолчанию. В настоящее время AGP 7.1 автоматически создает компонент для каждого варианта сборки, имеющий то же имя, что и вариант сборки, и компонент ` all , содержащий все варианты сборки. Это автоматическое создание компонентов будет отключено. Для перехода на новое поведение необходимо вручную отключить автоматическое создание компонентов, установив параметр android.disableAutomaticComponentCreation в значение true. Для получения дополнительной информации см. раздел «Использование плагина Maven Publish» .
Совместимость с Firebase Performance Monitoring
AGP 7.1 несовместим с плагином Firebase Performance Monitoring Gradle версии 1.4.0 и ниже. Мастер обновления AGP не обновит плагин автоматически до версии 1.4.1, поэтому, если вы используете firebase-perf и хотите обновить AGP до версии 7.1, вам необходимо выполнить это обновление вручную.
Известные проблемы
В этом разделе описаны известные проблемы, существующие в плагине Android Gradle версии 7.1.0.
Проблемы с модульным тестированием приложения, использующего плагин Hilt.
Путь к классам для модульных тестов содержит неинструментированные классы приложения, что означает, что Hilt не инструментирует классы приложения для обработки внедрения зависимостей при запуске модульных тестов.
Эта проблема будет исправлена в версии 7.1.1, см. проблему #213534628 .