Плагин Android Gradle 7.1.0 (январь 2022 г.)
Плагин Android Gradle 7.1.0 — это крупный релиз, включающий множество новых функций и улучшений.
7.1.3 (апрель 2022 г.)
Это небольшое обновление включает в себя следующие исправления ошибок:
- Проблемы с дублированием классов, о которых сообщил R8
Полный список исправлений ошибок, включенных в этот выпуск, можно найти в сообщении блога Android Studio Bumblebee Patch 3 .
7.1.2 (февраль 2022 г.)
Это небольшое обновление включает в себя следующие исправления ошибок:
- Плагин Android Gradle 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: созданный файл javadoc jar не подписывается
- ClassesDataSourceCache должен использовать последнюю версию Asm
- Android Studio BumbleBee не всегда развертывает последние изменения
Полный список исправлений ошибок, включенных в этот выпуск, можно найти в сообщении блога Android Studio Bumblebee Patch 2 .
7.1.1 (февраль 2022 г.)
Это небольшое обновление соответствует выпуску Android Studio Bumblebee Patch 1.
Список исправлений ошибок, включенных в этот выпуск, можно найти в сообщении блога 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» . |
Задача анализа lint теперь кэшируется
AndroidLintAnalysisTask
теперь совместим с кэшем сборки Gradle . Если вы включите кэш сборки, установив org.gradle.caching=true
в файле gradle.properties
, задача анализа lint будет получать свои выходные данные из кэша сборки, когда это возможно.
Задача анализа lint часто является самым большим узким местом при запуске lint с плагином Android Gradle, поэтому включение кэша сборки повышает скорость сборки при запуске lint во многих ситуациях. Вы должны увидеть заметное улучшение производительности, например, если у вас многомодульный проект и вы очищаете каталог сборки перед запуском lint на вашем сервере CI.
Модули C/C++ теперь могут ссылаться на другие модули C/C++ в том же проекте.
Модуль Gradle Android с кодом C/C++ теперь может быть настроен для ссылки на файлы заголовков и код библиотеки в другом модуле Gradle. Протокол Prefab используется для передачи заголовков и библиотек между модулями Gradle.
Требования
Потребляющий модуль должен быть
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 для всего приложения . Так, например, как потребляющие, так и публикующие модули могут использовать общий 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 resource shrinker была обновлена в Android Gradle Plugin 7.1.0-alpha09. Новая реализация поддерживает сжатие приложений с динамическими функциями.
Экспериментальное дальнейшее уменьшение размера приложения
Новая реализация сжимателя ресурсов может еще больше уменьшить размер вашего сжатого приложения, изменив таблицу ресурсов для удаления неиспользуемых ресурсов значений и ссылок на неиспользуемые файловые ресурсы. Новая реализация сжимателя ресурсов может полностью удалить неиспользуемые файловые ресурсы, еще больше уменьшив размер вашего приложения. Это поведение пока не включено по умолчанию, но вы можете попробовать его, добавив экспериментальную опцию 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 и публиковать файлы Javadoc JAR в дополнение к файлам AAR для библиотечных проектов. Javadoc добавляется в файлы POM и Gradle Module Metadata {:.external}. Включите эту функцию, добавив withJavadocJar()
в блок публикации singleVariant
или multipleVariants
. Чтобы узнать больше, см. пример кода параметров публикации .
Публикация исходных файлов JAR
AGP 7.1.0 и выше позволяет публиковать исходные файлы JAR Java и Kotlin в дополнение к файлам AAR для библиотечных проектов. Исходные файлы добавляются в файлы POM и Gradle Module Metadata {:.external}. Эту функцию можно включить, добавив withSourcesJar()
в блок публикации singleVariant
или multipleVariants
. Чтобы узнать больше, см. пример кода параметров публикации .
Семантическое изменение блока линта
Все методы lint, которые переопределяют заданный уровень серьезности проблемы — enable
, disable
/ ignore
, informational
, warning
, error
, fatal
— теперь учитывают порядок конфигурации. Например, установка проблемы как 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.
Кроме того, Navigation Safe Args версий 2.4.1 и 2.5.0 больше не будут работать с 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 Upgrade Assistant не обновит плагин автоматически до версии 1.4.1, поэтому, если вы используете firebase-perf
и хотите обновить AGP до 7.1, вам нужно выполнить это обновление вручную.
Известные проблемы
В этом разделе описываются известные проблемы, существующие в плагине Android Gradle 7.1.0.
Проблемы с модульным тестированием проекта приложения, использующего плагин Hilt
Путь к классам модульного теста содержит неинструментированные классы приложений, что означает, что Hilt не инструментирует классы приложений для обработки внедрения зависимостей при запуске модульных тестов.
Эта проблема будет исправлена в версии 7.1.1, см. проблему #213534628 .