Плагин 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 добавляет зависимости непосредственно в ваши скрипты сборки, а не через каталоги версий.

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

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

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

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

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

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

Изменения в поведении линта

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

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

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

Чтобы отключить точное сжатие ресурсов, установите для параметра 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() должным образом
Плохая документация по классам/свойствам 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 не вступает в силу
РЕГРЕССИЯ 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
Поддержка новых тегов манифеста,
Ссылка на «Разделенные проекты» в настройках студии ведет не туда.
Пожалуйста, предоставьте возможность включения сгенерированных исходных текстов в 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 на ложное срабатывание неиспользуемого ресурса внутри привязки и прослушивателя щелчков
Не удалось загрузить пользовательский JAR-файл проверки lint: 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 для обновления до более новой версии.
Интеграция Lint
Ошибка линтинга 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
Lint не может разрешить типы родственных исходных наборов в AGP 8.3.0-rc02

Плагин Android Gradle 8.3.2

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