Плагин 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 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.
ЯДК 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 по умолчанию была обновлена ​​в плагине Android Gradle 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. По сравнению с предыдущими версиями это также позволяет избежать ненужной работы, поскольку по умолчанию компоненты не создаются. Дополнительные сведения см. в примере кода публикации .

Опубликовать JAR Javadoc

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.

Кроме того, версии 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 несовместим с плагином Gradle для мониторинга производительности Firebase версии 1.4.0 и ниже. Помощник по обновлению AGP не будет автоматически обновлять плагин до версии 1.4.1, поэтому, если вы используете firebase-perf и хотите обновить AGP до версии 7.1, вам необходимо выполнить это конкретное обновление вручную.

Известные проблемы

В этом разделе описаны известные проблемы, существующие в плагине Android Gradle 7.1.0.

Проблемы с модульным тестированием проекта приложения, использующего плагин Hilt.

Путь к классам модульного теста содержит неинструментированные классы приложений, что означает, что Hilt не инструментирует классы приложений для обработки внедрения зависимостей при запуске модульных тестов.

Эта проблема будет исправлена ​​в выпуске 7.1.1, см. проблему № 213534628 .

,

Плагин 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 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.
ЯДК 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 по умолчанию была обновлена ​​в плагине Android Gradle 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. По сравнению с предыдущими версиями это также позволяет избежать ненужной работы, поскольку по умолчанию компоненты не создаются. Дополнительные сведения см. в примере кода публикации .

Опубликовать JAR Javadoc

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.

Кроме того, версии 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 несовместим с плагином Gradle для мониторинга производительности Firebase версии 1.4.0 и ниже. Помощник по обновлению AGP не будет автоматически обновлять плагин до версии 1.4.1, поэтому, если вы используете firebase-perf и хотите обновить AGP до версии 7.1, вам необходимо выполнить это конкретное обновление вручную.

Известные проблемы

В этом разделе описаны известные проблемы, существующие в плагине Android Gradle 7.1.0.

Проблемы с модульным тестированием проекта приложения, использующего плагин Hilt.

Путь к классам модульного теста содержит неинструментированные классы приложений, что означает, что Hilt не инструментирует классы приложений для обработки внедрения зависимостей при запуске модульных тестов.

Эта проблема будет исправлена ​​в выпуске 7.1.1, см. проблему № 213534628 .

,

Плагин 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 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.
ЯДК 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 по умолчанию была обновлена ​​в плагине Android Gradle 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. По сравнению с предыдущими версиями это также позволяет избежать ненужной работы, поскольку по умолчанию компоненты не создаются. Дополнительные сведения см. в примере кода публикации .

Опубликовать JAR Javadoc

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.

Кроме того, версии 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 несовместим с плагином Gradle для мониторинга производительности Firebase версии 1.4.0 и ниже. Помощник по обновлению AGP не будет автоматически обновлять плагин до версии 1.4.1, поэтому, если вы используете firebase-perf и хотите обновить AGP до версии 7.1, вам необходимо выполнить это конкретное обновление вручную.

Известные проблемы

В этом разделе описаны известные проблемы, существующие в плагине Android Gradle 7.1.0.

Проблемы с модульным тестированием проекта приложения, использующего плагин Hilt.

Путь к классам модульного теста содержит неинструментированные классы приложений, что означает, что Hilt не инструментирует классы приложений для обработки внедрения зависимостей при запуске модульных тестов.

Эта проблема будет исправлена ​​в выпуске 7.1.1, см. проблему № 213534628 .