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

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

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

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

Минимальная версия Версия по умолчанию Примечания
Gradle 8.4 8.4 Подробнее о том, как обновить Gradle…
Инструменты сборки SDK 34.0.0 34.0.0 Установите или настройте инструменты сборки SDK.
NDK Н/Д 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 добавляет зависимости непосредственно в скрипты сборки. Ассистент Firebase добавляет зависимости непосредственно в скрипты сборки, а не через каталоги версий.

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

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

Дополнительная информация об SDK: нарушения правил

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

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

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

Изменения в работе инструмента Lint

Начиная с версии 8.3.0-alpha02 плагина Android Gradle, при запуске 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 test возникает ошибка "Не удается найти выходные данные манифеста", если для параметров splits.abi.isEnable и testOptions.unitTests.isIncludeAndroidResources задано значение true
При создании модели AGP происходит сбой из-за вложенных составных сборок Gradle
Удаление неиспользуемых ресурсов искажает идентификаторы ресурсов, что приводит к сбоям во время выполнения
Проверка минимальной версии Gradle не выполняется при второй и последующих сборках
Не удалось выполнить задачу ":app:mergeReleaseClasses" после обновления AGP с версии 8.0.2 до 8.1.0
[Gradle 8.4][upgrade] Сбой интеграционного тестирования после обновления из-за использования устаревшей функции в плагине Kotlin Gradle
Не проверять наличие файлов наложения манифеста на этапе настройки
Неработающая ссылка на документацию Gradle в сообщении об ошибке MergeJavaResWorkAction
Gradle 8.1 нарушает кеширование конфигурации из-за файла .gradle/.android/analytics.settings
AGP не должен использовать ProjectComponentIdentifier.projectPath без ProjectComponentIdentifier.build
Уменьшите или удалите ведение журнала на уровне информации для AGP "Analytics other plugin to proto: ..."
[Gradle 8.4][upgrade] Операция с файлом во время конфигурации в ProcessJavaResTask нарушает кеширование конфигурации
API вариантов для получения таблицы символов (R.txt)
Отдельный плагин lint неправильно обрабатывает зависимость gradleApi()
Некачественная документация kDocs для классов и свойств AGP. `VariantOutput.enable` suggests it should be replaced with `VariantOutput.enable`
AGP 8.3.0-alpha02 не может устанавливать профили выпуска на хостах Windows
Принудительное использование параметра `android.enableDexingArtifactTransform=true`
[Gradle 8.4][upgrade] Сбой интеграционного тестирования после обновления из-за обработки файлов на этапе конфигурации
AGP 8.3.0-alpha-02 – `Error: Failed to deserialize cached resource repository.`
[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 не действует
HEDGEHOG REGRESSION: кнопка запуска срабатывает с задержкой в несколько секунд (создание спецификации)
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 с модулем библиотеки, содержащим только ресурсы
Вариант специального плагина AGP 7.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 завершается с ошибкой в проекте, который использует динамические функции
Dexer (D8)
[desugared library] Библиотека desugared версии 2.1 несовместима с предыдущими версиями R8
Можно ли выполнять оптимизацию, используя только D8?
Lint
[Lint] TranslucentViewDetector завершает работу с ошибкой в функции filterIncident и приводит к тому, что инструмент Lint выдает неверный результат
TranslucentViewDetector должен принимать значение "behind"
Android Lint не работает с библиотекой KMP, так как у свойства variantInputs.name нет настроенного значения.
TranslucentViewDetector указывает неверную строку в манифесте
lintDebug ложно сообщает о предупреждениях UseTomlInstead при использовании зависимостей проекта
Непредвиденные проблемы из другого проекта, отмеченные инструментом Android Lint.
Проверка инструмента анализа кода: ложное положительное обнаружение неиспользуемого ресурса внутри привязки и прослушивателя кликов
Не удалось загрузить JAR-файл для проверки кода с помощью инструмента lint: узел нельзя преобразовать в TreeNode
Проверка visitAnnotationUsage не вызывается для использования аннотированных классов в объявлениях переменных
В Lint 31.0.2 возникает ошибка java.util.NoSuchElementException: Array is empty.
Нет предупреждения Lint о том, что для kotlin.text.MatchNamedGroupCollection#get(String) требуется API 26
lint:TypographyQuotes false negatives: more than one escaped apostrophe are ignored
Ложноположительный результат детектора InvalidId в AGP 8.0.2
Проблемы LintError добавлены в базовые показатели Lint
Быстрая проверка Lint не работает и приводит к ошибке IDE
Несоответствие результатов тестирования из-за неполного анализа
Неправильное выделение предупреждения, которое является ложноположительным.
Проверка visitAnnotationUsage не вызывается для использования аннотированных классов в объявлениях переменных
Процессор неиспользуемых ресурсов может удалить файл сборки Gradle
Проверка NewApi не распознает конечное поле "isAtleastU() && otherCondition()"
StackOverflow из `LintClient.getSdkHome`
Android Studio / Lint не сообщает, когда зависимости платформы устарели
Ошибка: нет предложения обновить зависимость firebase-bom
Структура проекта (и Gradle (?)) не обнаруживает зависимости BoM Firebase, которые можно обновить до более новой версии.
Интеграция с Lint
Ошибка DuplicatePlatformClasses при проверке кода из зависимости testImplementation
Shrinker (R8)
R8 не работает после обновления с AGP 8.0.2 до 8.1.0
isShrinkResources переоптимизирует ресурсы в версиях 8.3.0-alpha11–alpha14
Сбой Flurry SDK в R8 с AGP 8.2.0
Android - R8 вызывает сбой подкласса LinearLayoutManager
R8 v8.2.33, "java.lang.VerifyError: Bad type on operand stack" runtime crash after upgrade
[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