Плагин 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)
   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 .