Плагин Android Gradle 8.2.0 (ноябрь 2023 г.)

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

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

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

Минимальная версия Версия по умолчанию Примечания
Gradle 8.2 8.2 Подробнее о том, как обновить Gradle…
Инструменты сборки SDK 34.0.0 34.0.0 Установите или настройте инструменты сборки SDK.
NDK Н/Д 25.1.8937393 Установите или настройте другую версию NDK.
JDK 17 17 Подробнее о том, как задать версию JDK…

Новый макрос для указания пути к JDK

#GRADLE_LOCAL_JAVA_HOME – это новый макрос, который можно использовать, чтобы указать путь к JDK. Это позволяет проще и безопаснее указывать путь к домашнему каталогу Java, который используется для выполнения демона Gradle (фонового процесса) для вашего проекта. Выбранный путь хранится в поле java.home файла .gradle/config.properties. Это поле можно задать в настройках Gradle JDK в Android Studio: File (Файл) (или Android Studio в macOS) > Settings (Настройки) > Build, Execution, Deployment (Сборка, выполнение, развертывание) > Build Tools (Инструменты сборки) > Gradle.

В новых проектах по умолчанию будет использоваться #GRADLE_LOCAL_JAVA_HOME. Существующие проекты будут автоматически перенесены на новый макрос после успешной синхронизации, если вы ещё не используете макрос, например #JAVA_HOME.

Вот основные преимущества нового макроса:

  • Вы можете вручную изменить путь к JDK, чтобы запустить синхронизацию, не открывая проект.
  • Меньше ошибок, связанных с несовместимостью версий Gradle и JDK проекта, поскольку для выбора JDK Gradle используется единый источник достоверной информации.

Устраненные проблемы

Плагин Android Gradle 8.2.2

Устраненные проблемы
Плагин Android Gradle
Не удается задать версию JaCoCo в AGP 8.2.0
Dexer (D8)
[desugared library] Библиотека desugared версии 2.1 несовместима с предыдущими версиями R8
Можно ли выполнять оптимизацию, используя только D8?
Shrinker (R8)
[R8 8.3.21] Размер R8 8.3.21 на 1,57 МБ больше, чем размер R8 8.1.56
class.getInterfaces() возвращает пустой результат

Плагин Android Gradle 8.2.1

Устраненные проблемы
Плагин Android Gradle
Не выполнять задачу dexing для классов подпроектов, если они уже были преобразованы в формат DEX с помощью преобразований артефактов
Плагин Android Gradle не работает с JavaVersion.VERSION_11 и OpenJDK 21 ea
Dexer (D8)
Записи десахаризации для Android U
Shrinker (R8)
R8 создает поврежденный файл DEX, из-за чего во время выполнения возникает исключение приведения типов
R8 вызывает изменение интерфейса на недоступный интерфейс
Сбой Flurry SDK в R8 с AGP 8.2.0
Android - R8 вызывает сбой подкласса LinearLayoutManager
Исключение ClassCastException в R8, когда включена переупаковка и отключены сжатие, обфускация и оптимизация
R8 зависает в BridgeAnalyzer.analyzeMethod
R8 v8.2.33, "java.lang.VerifyError: Bad type on operand stack" runtime crash after upgrade

Плагин Android Gradle 8.2.0

Устраненные проблемы
Плагин Android Gradle
Для источников пользовательских типов следует создавать наборы источников с несколькими вариантами
Проверка версии SDK не работает с пользователями расширений SDK
DependenciesInfoBuilder требует обновления API и документации
DexingNoClasspathTransform (minSdk >= 24) с целевой версией Java 11 завершается с ошибкой из-за отсутствия вложенных членов
DslExtension.Builder.extendProjectWith() не работает так, как описано в Groovy
Добавлен API VariantSelector.withFlavor, который не использует kotlin.Pair
AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) нет совпадения в кеше, поскольку файл proguard.txt был изменен
Объединенный манифест приложения содержит атрибуты extractNativeLibs и useEmbeddedDex из зависимостей
Сборка AIDL не выполняется с build-tools 33.0.0
AGP: предоставление пути к инструменту AIDL и файлу фреймворка AIDL в качестве общедоступного API
Запрос: пусть IDE предлагает исправление для ошибки "PermittedSubclasses requires ASM9"
При компиляции AGP используйте целевой байт-код 17
Удаление VariantManager.getModifiedName
Параметр AndroidTest.packaging.jniLibs.keepDebugSymbols не влияет на упаковку AndroidTest
Задачи инструментального тестирования GMD зависают, а при повторной попытке начинают завершаться с ошибкой
Функция generateLocaleConfig в AGP 8.1.0 использует недетерминированный порядок, из-за чего сборки не воспроизводятся
В ProcessApplicationManifest.navigationJsons есть файлы с абсолютными путями
После создания AnalyticsService доступ к GradleBuildProject.Builder через AnalyticsConfiguratorService запрещен
Параметр AndroidTest.packaging.jniLibs.keepDebugSymbols не влияет на упаковку AndroidTest
Компиляция разрешена для недопустимых значений цвета
Неверное значение ReplaceWith для VariantBuilder
Gradle 8.1 нарушает кеширование конфигурации из-за файла .gradle/.android/analytics.settings
В сообщениях об устаревании не используется параметр `ReplaceWith`
Добавлен способ получения версии NDK по умолчанию
Для работы плагина Android Gradle требуется Java 17.
Несовместимость ASM Transform и toAppend()
Исправлены ошибки LintErrors при запуске lint с K2 UAST через Gradle в проекте KMP
Поддержка missingDimensionStrategy на уровне варианта и, возможно, build type/flavor matchingFallback
Параметр `android.injected.studio.version` был удален в Android Studio Giraffe
Добавлена возможность отключить AndroidXDependencyCheck
Функция generateLocaleConfig в AGP 8.1.0 использует недетерминированный порядок, из-за чего сборки не воспроизводятся
Указывать требования к версии R8 / D8 в метаданных AAR (например, для coreLibraryDesugaring и новых API out-of-lining)
Предупреждение о синхронизации: "GradleBuildProject.Builder should not be accessed through AnalyticsConfiguratorService after AnalyticsService is created" (Не следует обращаться к GradleBuildProject.Builder через AnalyticsConfiguratorService после создания AnalyticsService)
Обновите Gradle до версии 8.2 (этап или RC)
Нет доступа к java.lang.Comparable
androidResources недоступен в модуле библиотеки Android
Не удалось выполнить задачу ":app:mergeReleaseClasses" после обновления AGP с версии 8.0.2 до 8.1.0
Gradle 8.1 нарушает кеширование конфигурации из-за файла .gradle/.android/analytics.settings
[AGP 8.1.0] При выполнении команды ./gradlew test возникает ошибка "Не удается найти выходные данные манифеста", если для параметров splits.abi.isEnable и testOptions.unitTests.isIncludeAndroidResources задано значение true
Android Studio Giraffe не учитывает versionCodeOverride с AGP 8.1
AGP 8.1.0 удаляет приложение после запуска инструментальных тестов, а 7.4.2 – нет
При преобразовании APK-файла возникает ошибка с ListingFileRedirectTask
HEDGEHOG REGRESSION: кнопка запуска срабатывает с задержкой в несколько секунд (создание спецификации)
Dexer (D8)
Включите запись и запечатанные классы при дексинге для min-api 34 и выше
Lint
Проверка lint, созданная на основе экземпляра, плохо обрабатывает AppComponentFactory
Альфа-версии Lint 8.2.0 по-прежнему не поддерживают импорт функций верхнего уровня в Kotlin
Добавлена возможность не включать номера строк и столбцов в базовый уровень lint
Добавлена возможность не включать номера строк и столбцов в базовый уровень lint
Тесты Lint не поддерживают функции языка Java 17.
Bumblebee 2021.1.1 Patch 1 считает, что старая версия (20030203.000550) commons-io новее, чем 2.11.0.
Альфа-версии Lint 8.2.0 по-прежнему не поддерживают импорт функций верхнего уровня в Kotlin
Bumblebee 2021.1.1 Patch 1 считает, что старая версия (20030203.000550) commons-io новее, чем 2.11.0.
Android Studio неправильно отмечает указанную версию как устаревшую.
При использовании K2 UAST инструмент Lint игнорирует проблему UseValueOf
Непредвиденные проблемы из другого проекта, отмеченные инструментом Android Lint.
Android Lint не работает с библиотекой KMP, так как у свойства variantInputs.name нет настроенного значения.
Интеграция с Lint
Ошибка DuplicatePlatformClasses при проверке кода из зависимости testImplementation
Shrinker (R8)
java.lang.VerifyError: Verifier rejected class
При использовании библиотеки Apache POI сборка зависает на этапе :minifyReleaseWithR8
В Kotlin 1.9 лямбда-выражения Kotlin удаляются R8, если удалены проверки на null