Плагин 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: созданный jar-файл Javadoc не подписывается
  • 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 на 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 обновлена в плагине Android Gradle 7.1.0-alpha09. Новая реализация поддерживает сжатие приложений с динамическими функциями.

Экспериментальное дальнейшее уменьшение размера приложения

Новая реализация сужения ресурсов может ещё больше уменьшить размер вашего сокращённого приложения, изменив таблицу ресурсов для удаления неиспользуемых ресурсов-значений и ссылок на неиспользуемые файловые ресурсы. Новый сужение ресурсов может полностью удалить неиспользуемые файловые ресурсы, что ещё больше уменьшит размер вашего приложения. Это поведение пока не включено по умолчанию, но вы можете попробовать его, добавив экспериментальную опцию android.experimental.enableNewResourceShrinker.preciseShrinking=true в файл gradle.properties вашего проекта.

Пожалуйста, сообщайте о любых проблемах, обнаруженных с новым сужением ресурсов или экспериментальным флагом. Для диагностики проблем или в качестве временного решения вы можете вернуться к предыдущей реализации, добавив android.enableNewResourceShrinker=false в gradle.properties вашего проекта. Новый сужающий механизм заменяет неиспользуемые файловые ресурсы немного отличающимися минимальными файлами, чем предыдущий сужающий механизм, но это, как ожидается, не окажет никакого влияния на время выполнения.

Старую реализацию планируется удалить в плагине Android Gradle 8.0.0.

Публикация вариантов сборки

Плагин Gradle для Android версии 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 — теперь учитывают порядок настройки. Например, указание проблемы как fatal в finalizeDsl() теперь переопределяет её отключение в основном DSL. Подробнее см. в справочной документации по блоку lint{} и в документации по потоку сборки Android и точкам расширения .

API AGP, от которых зависит плагин Gradle Navigation Safe Args, были удалены. 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

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 .