Плагин Android Gradle 8.3.0 (февраль 2024 г.)

Плагин Android Gradle 8.3.0 — это крупный релиз, включающий множество новых функций и улучшений.

Совместимость

Максимальный уровень API, поддерживаемый плагином Android Gradle 8.3, — API 34. Вот дополнительная информация о совместимости:

Минимальная версия Версия по умолчанию Примечания
Градл 8.4 8.4 Более подробную информацию см. в разделе Обновление Gradle .
Инструменты сборки SDK 34.0.0 34.0.0 Установите или настройте инструменты сборки SDK.
НДК Н/Д 25.1.8937393 Установите или настройте другую версию NDK.
JDK 17 17 Более подробную информацию см. в разделе «Настройка версии JDK» .

Ниже приведены новые функции плагина Android Gradle 8.3.

Выпуски патчей

Ниже приведен список выпущенных исправлений в Android Studio Iguana и плагине Android Gradle 8.3.

Android Studio Iguana | 2023.2.1 Patch 2 и AGP 8.3.2 (апрель 2024 г.)

Это небольшое обновление включает в себя исправления следующих ошибок .

Android Studio Iguana | 2023.2.1 Patch 1 и AGP 8.3.1 (март 2024 г.)

Это небольшое обновление включает в себя исправления следующих ошибок .

Поддержка каталогов версий Gradle

Android Studio поддерживает каталоги версий Gradle на основе TOML, функцию, которая позволяет управлять зависимостями в одном центральном месте и совместно использовать зависимости между модулями или проектами. Теперь Android Studio упрощает настройку каталогов версий с помощью предложений редактора и интеграции с диалоговым окном структуры проекта . Узнайте, как настроить и настроить каталоги версий Gradle или как перенести сборку в каталоги версий .

Автодополнение кода и навигация

Android Studio предлагает автодополнение кода при редактировании каталога версий в формате файла TOML или добавлении зависимости из каталога версий в файл сборки. Чтобы использовать автодополнение кода, нажмите Ctrl+Пробел ( Command+Пробел на macOS). Кроме того, вы можете быстро перейти от ссылки на зависимость в файле build.gradle вашего приложения к месту, где она объявлена ​​в каталоге версий, нажав Ctrl+b ( Command+b на macOS).

Автодополнение кода при добавлении зависимости

Интеграция с диалоговым окном «Структура проекта»

Если ваш проект использует каталог версий, определенный в формате файла TOML, вы можете редактировать переменные, которые вы там определили, через диалоговое окно структуры проекта Вид переменных ( Файл > Структура проекта > Переменные ) в Android Studio. Для каждого каталога версий есть раскрывающийся список, в котором перечислены переменные из этого каталога. Чтобы отредактировать переменную, щелкните ее значение и перезапишите его. При сохранении этих изменений файл TOML обновляется соответствующим образом.

Переменные из каталога версий в диалоговом окне «Структура проекта»

Вы также можете обновить зависимости в диалоговом окне Структура проекта Вид зависимостей ( Файл > Структура проекта > Зависимости ). Чтобы обновить версии с помощью диалогового окна Структура проекта , перейдите к модулю и зависимости, которые вы хотите изменить, а затем обновите поле Запрошенная версия . При сохранении этих изменений файл TOML обновляется соответствующим образом. Обратите внимание, что если версия зависимости была определена с помощью переменной, обновление версии напрямую таким образом заменяет переменную жестко закодированным значением. Также имейте в виду, что удаление зависимости из файла сборки, независимо от того, используете ли вы диалоговое окно Структура проекта или нет, не удаляет зависимость из каталога версий.

Зависимости из каталога версий в диалоговом окне «Структура проекта»

Известные проблемы и ограничения

Ниже перечислены известные проблемы и ограничения, связанные с поддержкой каталогов версий Gradle в Android Studio.

  • Ошибка подсветки объявлений псевдонимов плагинов в файлах скриптов Kotlin: при добавлении объявления плагина в форме alias(libs.plugins.example) редактор добавляет красное подчеркивание под частью libs . Это известная проблема в версиях Gradle 8.0 и ниже, и она будет решена в будущем выпуске Gradle.

  • Поддержка Android Studio только для каталогов версий в формате TOML: в настоящее время поддержка автодополнения кода, навигации и диалога структуры проекта Android Studio доступна только для каталогов версий, определенных в формате файла TOML. Однако вы по-прежнему можете добавить каталог версий непосредственно в файл settings.gradle и использовать его зависимости в своем проекте.

  • Навигация для файлов сборки KTS не поддерживается: переход к определению зависимости в каталоге версий с помощью Control + щелчок ( Command + щелчок в macOS) пока не поддерживается для файлов сборки, написанных с использованием скрипта Kotlin.

  • Firebase Assistant добавляет зависимости непосредственно в скрипты сборки: Firebase Assistant добавляет зависимости непосредственно в скрипты сборки, а не через каталоги версий.

  • Функциональность "Find usages" не поддерживается: поиск использований переменной каталога версий в других файлах сборки пока не поддерживается, независимо от того, находится ли файл сборки в KTS или Groovy. То есть использование Control +click ( Command +click в macOS) на определении переменной в каталоге версий не приводит к файлам сборки, где используется переменная.

  • Диалоговое окно Project Structure в Android Studio показывает несколько файлов каталогов, если они находятся в корневой папке gradle , но не показывает каталоги для составной сборки . Например, если у вас есть два файла каталога — один для вашего приложения и один для составной сборки — диалоговое окно Project Structure показывает только файл каталога приложения. Вы можете использовать составную сборку, но вам придется редактировать ее файл TOML напрямую.

Дополнительные сведения о SDK: вопросы политики

Android Studio отображает предупреждения lint в файлах build.gradle.kts и build.gradle , а также в диалоговом окне структуры проекта для общедоступных SDK, которые имеют нарушения политики Play в индексе Google Play SDK . Вам следует обновить все зависимости, которые нарушают политику Play, поскольку эти нарушения могут помешать вам публиковать в консоли Google Play в будущем. Предупреждения о нарушении политики дополняют предупреждения об устаревшей версии, отображаемые Android Studio.

Поддержка версии Android Studio compileSdk

Android Studio отображает предупреждение, если ваш проект использует compileSdk , который не поддерживается текущей версией Android Studio. Если доступно, также предлагается перейти на версию Android Studio, которая поддерживает compileSdk используемый вашим проектом. Имейте в виду, что обновление Android Studio может также потребовать обновления AGP . AGP также отображает предупреждение в окне инструмента сборки , если compileSdk , используемый вашим проектом, не поддерживается текущей версией AGP.

Изменения в поведении ворса

Начиная с плагина Android Gradle 8.3.0-alpha02, при запуске lint на модуле запускаются отдельные задачи анализа lint для основных и тестовых компонентов модуля. Причина этого изменения — повышение производительности. Чтобы вернуться к предыдущему поведению, установите android.experimental.lint.analysisPerComponent=false в файле gradle.properties .

Точное сокращение ресурсов включено по умолчанию

Точное сокращение ресурсов, которое удаляет неиспользуемые записи из файла resources.arsc и устраняет неиспользуемые файлы ресурсов, включено по умолчанию. Когда это сокращение включено, ваша таблица ресурсов уменьшается, и только указанные записи папки res включаются в APK.

Чтобы отключить точное сжатие ресурсов, установите для параметра android.enableNewResourceShrinker.preciseShrinking значение false в файле gradle.properties вашего проекта.

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

Плагин Android Gradle 8.3.0

Исправленные проблемы
Плагин Android Gradle
Кэш сборки избыточный для задачи PackageForUnitTest
[AGP 8.1.0] Тест ./gradlew завершается ошибкой «Невозможно найти выходные данные манифеста», если оба параметра splits.abi.isEnable и testOptions.unitTests.isIncludeAndroidResources имеют значение true
Построение модели AGP завершается ошибкой при использовании вложенных составных сборок Gradle
Сокращение ресурсов искажает идентификаторы ресурсов, что приводит к сбоям во время выполнения
Проверка минимальной версии Gradle не выполняется во второй сборке и после
Выполнение задачи «:app:mergeReleaseClasses» не удалось после обновления AGP с версии 8.0.2 до версии 8.1.0
[Gradle 8.4][обновление] Ошибка интеграционного теста после обновления из-за использования устаревшей функции в плагине gradle для Kotlin
Не проверять наличие файлов наложения манифеста на этапе конфигурации
Неработающая ссылка на документацию Gradle при ошибке MergeJavaResWorkAction
Gradle 8.1 нарушает кэширование конфигурации из-за .gradle/.android/analytics.settings
AGP не следует использовать ProjectComponentIdentifier.projectPath без ProjectComponentIdentifier.build
Пожалуйста, сократите/удалите ведение журнала на уровне информации для AGP «Analytics other plugin to proto: ...»
[Gradle 8.4][обновление] Операция с файлом во время настройки в ProcessJavaResTask нарушает кэширование конфигурации
Вариант API для получения таблицы символов (R.txt)
Автономный плагин lint не обрабатывает зависимость gradleApi() должным образом
Плохая kDocs по классам/свойствам AGP. `VariantOutput.enable` предполагает, что его следует заменить на `VariantOutput.enable`
AGP 8.3.0-alpha02 не может установить профили релизов на хостах Windows
Принудительно применять `android.enableDexingArtifactTransform=true`
[Gradle 8.4][обновление] Ошибка интеграционного теста после обновления из-за обработки файла на этапе конфигурации
AGP 8.3.0-alpha-02 - `Ошибка: не удалось десериализовать кэшированный репозиторий ресурсов.`
[Gradle 8.4][обновление] Ошибка интеграционного теста после обновления из-за обработки файла на этапе конфигурации TestLabBuildService
AGP 8.1.0 удаляет приложение после запуска инструментальных тестов — 7.4.2 этого не делает
Преобразование APK приводит к ошибке ListingFileRedirectTask
Преобразование артефакта ASSETS приводит к появлению неисправных входных/выходных локаций
Повысить android.experimental.r8.dex-startup-optimization=true до значения по умолчанию
Переход на новый API выравнивания конфигурации Gradle
Компиляция ресурсов завершается ошибкой при попытке компилятора Kotlin обновиться до IDEA 21.3
Реактивный get() с API артефактов
Перевод свойства AGP "android.lint.printStackTrace" в стабильную версию
AGP 8.1.0: динамическая функция: неявная зависимость между exportReleaseConsumerProguardFiles и extractProguardFiles приводит к ошибкам компиляции
`variant.unitTest.jniLibs.addGeneratedSourceDirectory`, похоже, ничего не делает
Обновление XML-парсера, используемого в AGP, для совместимости с Gradle 8.4.
Пакет релиза AGP 8.0.1 jacoco instrument не вступает в силу
РЕГРЕССИЯ HEDGEHOG: Кнопка «Выполнить» задерживается на несколько секунд (Создание спецификации)
AGP 8.3.0-alpha11 создает релиз APK, который вылетает при запуске с android.content.res.Resources$NotFoundException
Перевод свойства AGP "android.lint.printStackTrace" в стабильную версию
Запрос на функцию: повышение com.android.build.api.extension.impl.CURRENT_AGP_VERSION до общедоступного API
Менеджер SDK должен прекратить спамить журнальную информацию в stdout
DexArchiveBuilderTaskDelegate не удалось использовать только ресурсный модуль библиотеки
Пользовательский вариант плагина AGP7.4 toTransform для всех выдает дубликаты записей: исключение META-INF/MANIFEST.MF
Поддержка новых тегов Manifest,
Ссылка на «Разделенные проекты» в настройках студии ведет не туда.
Пожалуйста, предоставьте возможность включения сгенерированных исходников в Javadoc и SourceJar
Необходимо быстро исправить несоответствие между compileSdk и зависимостью с minCompileSdkVersion
[Gradle] tools:overrideLibrary должна поддерживать звездочку (*)
Зависание пользовательского интерфейса при редактировании манифеста
Невозможно установить версию JaCoCo в AGP 8.2.0
Задача установки плагина Android Gradle 8.2.0 завершается ошибкой в ​​проекте, использующем динамические функции
Задача установки плагина Android Gradle 8.2.0 завершается ошибкой в ​​проекте, использующем динамические функции
Дексер (D8)
[библиотека desugared] Библиотека desugared версии 2.1 несовместима с предыдущими версиями R8
Оптимизации работают даже только с D8?
Ворс
[Lint] TranslucentViewDetector дает сбой в функции filterIncident и приводит к тому, что lint выдает неверный результат.
TranslucentViewDetector должен принимать значение «behind»
Android Lint дает сбой в библиотеке KMP, у которой «свойство 'variantInputs.name' не имеет настроенного значения».
TranslucentViewDetector сообщает о неправильной строке в манифесте
lintDebug ложно выдает предупреждения UseTomlInstead при использовании зависимостей проекта
Android Lint выявил неожиданные проблемы в другом проекте
Проверка LINT на ложное срабатывание неиспользуемого ресурса внутри привязки и прослушивателя щелчков
Не удалось загрузить пользовательский файл проверки lint jar: Node не может быть преобразован в TreeNode
Lint visitAnnotationUsage не вызывается для использования аннотированных классов в объявлениях переменных
Lint 31.0.2 завершается ошибкой java.util.NoSuchElementException: Массив пуст.
Нет предупреждения Lint о kotlin.text.MatchNamedGroupCollection#get(String), требующем API 26
lint:TypographyQuotes ложные отрицания: игнорируется более одного экранированного апострофа
AGP 8.0.2 lint InvalidId детектор ложноположительный
Проблемы LintError добавлены в базовые показатели lint
Quickfix Lint не работает и приводит к ошибке IDE
Непоследовательный сбой теста из-за частичного анализа
Неверное выделение предупреждения, которое является ложным срабатыванием
Lint visitAnnotationUsage не вызывается для использования аннотированных классов в объявлениях переменных
Неиспользуемые ресурсы процессора могут удалить файл сборки Gradle
Проверка lint NewApi не понимает конечное поле "isAtleastU() && otherCondition()"
StackOverflow из `LintClient.getSdkHome`
Android Studio / Lint не сообщает, когда зависимости «платформы» устарели
Ошибка: нет предложения обновить зависимость Firebase-bom
Структура проекта (и Gradle (?)) не обнаруживает зависимости Firebase BOM для обновления до более новой версии.
Интеграция Линта
Ошибка линтинга DuplicatePlatformClasses из-за зависимости testImplementation
Усадочный аппарат (R8)
R8 не работает после обновления с AGP 8.0.2 до 8.1.0
isShrinkResources переоптимизируется в 8.3.0-alpha11 до alpha14
Сбой R8 Flurry SDK с AGP 8.2.0
Android - R8 приводит к сбою подкласса LinearLayoutManager
R8 v8.2.33, сбой выполнения «java.lang.VerifyError: Неправильный тип в стеке операндов» после обновления
[R8 8.3.21] R8 8.3.21 на 1,57 МБ больше, чем R8 8.1.56
[R8 8.3.21] R8 8.3.21 на 1,57 МБ больше, чем R8 8.1.56
class.getInterfaces() возвращает пустой
Тест SimpleKotlinEnumUnboxingTest не пройден на боте kotlin_dev

Плагин Android Gradle 8.3.1

Исправленные проблемы
Плагин Android Gradle
Проблема обработки дополнительных входных данных MergeJavaResourcesTask
Интеграция Линта
Lint не может определить типы наборов исходных данных одного уровня в AGP 8.3.0-rc02

Плагин Android Gradle 8.3.2

Исправленные проблемы
Плагин Android Gradle
AGP 8.3 с включенной дешугаризацией может возникнуть тупиковая ситуация
AGP 8.3 ломает zipApksFor Task
Интеграция Линта
Lint не может устранить неоднозначность зависимости KMP