Предупреждение XA4322 в .NET для Android

Примеры сообщений

warning XA4322: Skipping library ProGuard configuration file 'obj/Debug/net10.0-android/lp/0/jl/proguard.txt' (from NuGet package 'Acme.SomeLibrary' 1.2.3) because it contains the unsupported global option '-printmapping'. Global ProGuard options are only allowed in application projects.

Issue

Библиотека Android (.aar) поставляется с файлом proguard.txt («потребительская конфигурация ProGuard»), который содержит глобальную опцию ProGuard, например -dontoptimize, -dontobfuscate, -printmapping, -printconfiguration, -printusage, -printseeds или -dump.

Эти параметры управляют всей сборкой (например, где R8 записывает файл сопоставления) и должны быть заданы только проектом приложения, использующее библиотеку. Их не допускают внутрь proguard.txt элемента .aar. Это соответствует поведению, введённому в Android Gradle Plugin 9.0, где R8 либо приводит к сбою при публикации библиотеки, либо молча игнорирует такие глобальные параметры, если они встречаются в предварительно скомпилированной зависимости (JAR или AAR). Чтобы сборка продолжала работать, .NET для Android полностью пропускает проблемный файл перед вызовом R8 и выводит это предупреждение.

Решение

Если вы являетесь владельцем библиотеки, удалите глобальные параметры из её элементов proguard.txt / ProguardConfiguration и вместо этого задайте их в ProguardConfiguration самого проекта приложения (например, задав $(AndroidProguardMappingFile), чтобы указать, куда будет записываться файл сопоставления). После удаления глобальных параметров правила хранения библиотеки снова будут переданы в R8.

Если вы не являетесь владельцем библиотеки, сообщите о проблеме её сопровождающим и попросите их удалить недопустимые параметры. До тех пор R8 не увидит ни одного из правил хранения из этой библиотеки proguard.txt, что может привести к снижению объема кода. Добавьте эквивалентные правила -keep в ProguardConfiguration вашего собственного приложения в качестве обходного решения.