Плагин 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.2

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

Плагин Android Gradle 8.3.1

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

Плагин 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