Плагин 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.
ЯДК 17 17 Дополнительные сведения см. в разделе Настройка версии JDK .

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

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

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

Android-студия Игуана | 2023.2.1, исправление 2 и AGP 8.3.2 (апрель 2024 г.)

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

Android-студия Игуана | Обновление 1 2023.2.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 +click ( Command +click в macOS) для определения переменной в каталоге версий не приводит к файлам сборки, в которых используется эта переменная.

  • Диалоговое окно «Структура проекта» в Android Studio отображает несколько файлов каталога, если они находятся в корневой папке gradle , но не отображает каталоги для составной сборки . Например, если у вас есть два файла каталога — один для вашего приложения и один для составной сборки — в диалоговом окне «Структура проекта» отображается только файл каталога приложения. Вы можете использовать составную сборку, но вам придется редактировать ее файл 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 и неиспользуемые файлы ресурсов, включено по умолчанию. Когда это сжатие включено, ваша таблица ресурсов уменьшается, и в 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][обновление] Сбой интеграционного теста после обновления из-за использования устаревшей функции в плагине Kotlin gradle
Не проверять наличие файлов наложения манифеста на этапе настройки.
Неработающая ссылка на документ Gradle из-за ошибки MergeJavaResWorkAction
Gradle 8.1 нарушает кэширование конфигурации из-за .gradle/.android/analytics.settings
AGP не должен использовать ProjectComponentIdentifier.projectPath без ProjectComponentIdentifier.build.
Пожалуйста, уменьшите/удалите ведение журнала на уровне информации для AGP «Другой плагин аналитики для прототипа: ...»
[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 не вступает в силу
РЕГРЕССИЯ ЕЖА: кнопка «Выполнить» задерживается на несколько секунд (Создание спецификации)
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]: overrideLibrary должен поддерживать звездочку (*)
Зависание пользовательского интерфейса при редактировании манифеста
Невозможно установить версию JaCoCo в AGP 8.2.0.
Задача установки плагина Android Gradle 8.2.0 завершается сбоем в проекте, который использует динамические функции
Задача установки плагина Android Gradle 8.2.0 завершается сбоем в проекте, который использует динамические функции
Дексер (D8)
[удаленная библиотека] Библиотека удаленной версии 2.1 несовместима с предыдущими версиями R8.
Оптимизации работают даже только с D8?
Ворс
[Lint] TranslucentViewDetector аварийно завершает работу функции filterIncident и приводит к тому, что lint выдает неправильный результат.
TranslucentViewDetector должен принимать значение «позади»
Android Lint не работает в библиотеке KMP, поскольку свойство «variantInputs.name» не имеет настроенного значения.
TranslucentViewDetector сообщает о неправильной строке в манифесте
lintDebug ложно сообщает о предупреждениях UseTomlInstead при использовании зависимостей проекта.
Неожиданные проблемы в другом проекте, отмеченные Android Lint
LINT проверяет ложное обнаружение неиспользуемого ресурса внутри привязки и прослушивателя кликов
Не удалось загрузить пользовательский файл jar проверки lint: узел невозможно привести к TreeNode.
Lint visitAnnotationUsage не вызывается при использовании аннотированных классов в объявлениях переменных.
Lint 31.0.2 завершается с ошибкой java.util.NoSuchElementException: массив пуст.
Нет предупреждения Lint о том, что kotlin.text.MatchNamedGroupCollection#get(String) требует API 26
lint:TypographyQuotes ложные отрицания: игнорируется более одного экранированного апострофа.
Ложное срабатывание детектора InvalidId AGP 8.0.2 lint
Проблемы LintError добавлены в базовые показатели lint
Quickfix Lint не работает и приводит к ошибке IDE
Непоследовательный провал теста из-за частичного анализа
Недопустимое выделение предупреждения, которое является ложным срабатыванием.
Lint visitAnnotationUsage не вызывается при использовании аннотированных классов в объявлениях переменных.
Процессор неиспользуемых ресурсов может удалить файл сборки Gradle
Проверка проверки NewApi не учитывает последнее поле «isAtleastU() &&otherCondition()».
StackOverflow из LintClient.getSdkHome
Android Studio/Lint не сообщает вам, когда зависимости «платформы» устарели.
Ошибка: нет предложения обновить зависимость Firebase-bom.
Структура проекта (и Gradle (?)) не обнаруживает зависимости спецификации Firebase для обновления до более новой версии.
Интеграция Линта
Ошибка проверки DuplicationPlatformClasses из-за зависимости 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 ломает zipAppsFor Task
Интеграция Линта
Lint не может устранить неоднозначность зависимости KMP