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

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

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

Максимальный уровень API, поддерживаемый плагином Android Gradle 8.3, — 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 и AGP 8.3.2 (апрель 2024 г.)

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

Android Studio Iguana | Патч 1 версии 2023.2.1 и AGP 8.3.1 (март 2024 г.)

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

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

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

Автозавершение кода и навигация

Android Studio предлагает автозавершение кода при редактировании каталога версий в формате TOML или добавлении зависимости из каталога версий в файл сборки. Чтобы использовать автозавершение кода, нажмите Ctrl+Space ( Command+Space на 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.

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

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

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

  • Функция «Поиск использований» не поддерживается: поиск использований переменной каталога версий в других файлах сборки пока не поддерживается, независимо от того, используется ли файл сборки в KTS или Groovy. То есть, нажатие Control + щелчок ( Command + щелчок в macOS) на определение переменной в каталоге версий не приводит к файлам сборки, где эта переменная используется.

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

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

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

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

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

Изменения в поведении Lint

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

Точное уменьшение объема ресурсов включено по умолчанию.

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

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

Исправлены ошибки

Плагин Android Gradle 8.3.2

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

Плагин Android Gradle 8.3.1

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

Плагин Android Gradle 8.3.0

Исправлены ошибки
Плагин Android Gradle
Кэш сборки является избыточным для задачи PackageForUnitTest.
[AGP 8.1.0] Команда ./gradlew test завершается с ошибкой "Не удалось найти выходные данные манифеста", если параметры splits.abi.isEnable и testOptions.unitTests.isIncludeAndroidResources имеют значение true.
Сборка модели AGP завершается с ошибкой при использовании вложенных сборок Gradle Composite.
Инструмент уменьшения размера ресурсов искажает идентификаторы ресурсов, что приводит к сбоям во время выполнения.
Проверка минимальной версии Gradle не выполняется при второй сборке и далее.
Выполнение задачи ':app:mergeReleaseClasses' завершилось с ошибкой после обновления AGP с версии 8.0.2 до 8.1.0.
[Gradle 8.4][обновление] Сбой интеграционного теста после обновления из-за использования устаревшей функции в плагине Kotlin Gradle
Не проверяйте наличие файлов наложения манифеста на этапе настройки.
Неработающая ссылка на документацию Gradle по ошибке MergeJavaResWorkAction
В Gradle 8.1 нарушено кэширование конфигураций из-за файла .gradle/.android/analytics.settings.
AGP не следует использовать ProjectComponentIdentifier.projectPath без ProjectComponentIdentifier.build.
Пожалуйста, сократите/удалите информационный уровень логирования для сообщения AGP "Другой плагин аналитики для proto: ..."
[Gradle 8.4][обновление] Работа с файлами во время настройки в ProcessJavaResTask нарушает кэширование конфигурации
Вариант API для получения таблицы символов (R.txt)
Плагин lint standalone некорректно обрабатывает зависимость 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][upgrade] Сбой интеграционного теста после обновления из-за обработки файлов на этапе конфигурации 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, не вступает в силу.
РЕГРЕССИЯ ЕЖА: Кнопка «Запуск» с задержкой в ​​несколько секунд (Создание спецификации)
В версии 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 следует прекратить заваливать стандартный вывод информацией из логов.
Ошибка DexArchiveBuilderTaskDelegate возникла из-за использования только модуля библиотеки ресурсов.
Пользовательский вариант плагина AGP7.4 toTransform для всех вызывает исключение "дублирующаяся запись: META-INF/MANIFEST.MF".
Поддерживаются новые теги манифеста.
Ссылка для "развязанных проектов" в настройках студии ведет не туда.
Пожалуйста, предоставьте возможность включения сгенерированных исходных файлов в Javadoc и SourceJar.
Необходимо быстро исправить несоответствие между compileSdk и зависимостью с minCompileSdkVersion.
[Gradle] tools:overrideLibrary should support asterisk (*)
Зависание пользовательского интерфейса при редактировании манифеста
Не удаётся установить версию JaCoCo в AGP 8.2.0.
Задача установки плагина Android Gradle 8.2.0 завершается с ошибкой в ​​проекте, использующем динамические функции.
Задача установки плагина Android Gradle 8.2.0 завершается с ошибкой в ​​проекте, использующем динамические функции.
Дексер (D8)
[Библиотека desugared] Версия 2.1 библиотеки desugared несовместима с предыдущими версиями R8.
Оптимизация выполняется даже только с D8?
Ворс
[Lint] Функция filterIncident выдает ошибку в TranslucentViewDetector, из-за чего lint выдает некорректный результат.
TranslucentViewDetector должен принимать значение "за".
Android Lint выдает ошибку при работе с библиотекой KMP: `property 'variantInputs.name' doesn't have configured value`.
TranslucentViewDetector сообщает об ошибке в строке манифеста.
lintDebug ошибочно выдает предупреждения UseTomlInstead при использовании зависимостей проекта.
Неожиданные проблемы из другого проекта, отмеченные Android Lint.
Проверка LINT на ложное срабатывание при обнаружении неиспользуемых ресурсов внутри обработчика событий и обработчика кликов
Не удалось загрузить пользовательский JAR-файл проверки синтаксиса: узел не может быть преобразован в тип TreeNode.
Функция Lint visitAnnotationUsage не вызывается для случаев использования аннотированных классов в объявлениях переменных.
Lint 31.0.2 выдает ошибку java.util.NoSuchElementException: Array is empty.
Нет предупреждения Lint о том, что kotlin.text.MatchNamedGroupCollection#get(String) требует API 26.
lint:TypographyQuotes ложные отрицания: игнорируется более одного экранированного апострофа
AGP 8.0.2 lint InvalidId detector false positive
В базовые версии линтинга добавлены ошибки LintError.
Quickfix Lint не работает и приводит к ошибке IDE.
Непоследовательные сбои в тестировании из-за неполного анализа.
Некорректное выделение предупреждения, являющееся ложноположительным результатом.
Функция Lint visitAnnotationUsage не вызывается для случаев использования аннотированных классов в объявлениях переменных.
Процессор неиспользуемых ресурсов может удалить файл сборки Gradle.
Проверка синтаксиса NewApi не распознает поле final "isAtleastU() && otherCondition()".
StackOverflow из `LintClient.getSdkHome`
Android Studio / Lint не сообщает о том, когда зависимости "платформы" устарели.
Ошибка: нет предложения обновить зависимость Firebase-bom.
Структура проекта (и Gradle (?)) не обнаруживает зависимости Firebase BOM, которые необходимо обновить до более новой версии.
Интеграция Lint
Ошибка проверки синтаксиса DuplicatePlatformClasses из зависимости testImplementation
Уменьшитель (R8)
R8 не работает после обновления с AGP 8.0.2 до 8.1.0.
В версиях 8.3.0-alpha11–alpha14 функция isShrinkResources выполняет чрезмерную оптимизацию.
Сбой R8 Flurry SDK при использовании AGP 8.2.0
В Android R8 подкласс LinearLayoutManager аварийно завершает работу.
R8 v8.2.33, сбой выполнения "java.lang.VerifyError: Bad type on operand stack" после обновления.
[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.