.NET für Android-Warnung XA4322

Beispielnachrichten

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

Eine Android-Bibliothek proguard.txt enthielt eine .aar Datei (eine „Consumer-ProGuard-Konfiguration“), die eine globale ProGuard-Option wie -dontoptimize, -dontobfuscate, -printmapping, -printconfiguration, -printusage, -printseeds oder -dump enthält.

Diese Optionen steuern den gesamten Build (z. B. R8 schreibt die Zuordnungsdatei) und darf nur vom Anwendungsprojekt festgelegt werden, das die Bibliothek verwendet. Sie sind innerhalb eines proguard.txt von .aar nicht zulässig. Dies entspricht dem Verhalten, das in Android Gradle Plugin 9.0 eingeführt wurde, wobei R8 entweder die Bibliotheksveröffentlichung fehlschlägt oder im Hintergrund solche globalen Optionen ignoriert, wenn sie in einer vorab kompilierten Abhängigkeit (JAR oder AAR) angezeigt werden. Damit Ihr Build funktioniert, überspringt .NET für Android die gesamte beleidigende Datei, bevor Sie R8 aufrufen und diese Warnung ausgeben.

Lösung

Wenn Ihnen die Bibliothek gehört, entfernen Sie die globalen Optionen aus ihren proguard.txt / ProguardConfiguration-Elementen und legen Sie sie stattdessen im ProguardConfiguration des Anwendungsprojekts fest (z. B. indem Sie $(AndroidProguardMappingFile) festlegen, um zu steuern, wo die Zuordnungsdatei geschrieben wird). Sobald die globalen Optionen entfernt wurden, werden die Keep-Regeln der Bibliothek wieder an R8 weitergegeben.

Wenn Sie nicht der Besitzer der Bibliothek sind, geben Sie ein Problem mit den Betreuern ein, und bitten Sie sie, die unzulässigen Optionen zu entfernen. Bis dahin sieht R8 keine der Regeln zum Beibehalten aus dem proguard.txt dieser Bibliothek, was dazu führen kann, dass der erforderliche Code verkleinert wird. Fügen Sie der eigenen Anwendung ProguardConfiguration gleichwertige -keep Regeln als Problemumgehung hinzu.