.NET för Android-varning XA4322

Exempelmeddelanden

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.

Problematik

Ett Android-bibliotek (.aar) levererade en proguard.txt fil (en "consumer ProGuard-konfiguration") som innehåller ett globalt ProGuard-alternativ som -dontoptimize, -dontobfuscate, -printmapping, -printconfiguration, -printusage, -printseedseller -dump.

De här alternativen styr hela versionen (till exempel där R8 skriver mappningsfilen) och får endast anges av det programprojekt som använder biblioteket. De får inte finnas i .aars proguard.txt. Detta matchar det beteende som introducerades i Android Gradle Plugin 9.0, där R8 antingen misslyckas med bibliotekspublicering eller tyst ignorerar sådana globala alternativ när de visas i ett förkompilerat beroende (JAR eller AAR). För att få bygget att fortsätta fungera hoppar .NET för Android över hela den felaktiga filen innan R8 körs och utfärdar den här varningen.

Lösning

Om du äger biblioteket tar du bort de globala alternativen från dess proguard.txt / ProguardConfiguration objekt och ställer i stället in dem i programprojektets egna ProguardConfiguration (till exempel genom att ange $(AndroidProguardMappingFile) för att styra var mappningsfilen skrivs). När de globala alternativen har tagits bort skickas bibliotekets behållregler återigen till R8.

Om du inte äger biblioteket kan du skicka ett problem till dess underhållare och be dem att ta bort de otillåtna alternativen. Fram till dess ser R8 inte någon av behåll-reglerna från bibliotekets proguard.txt, vilket kan leda till att nödvändig kod krymps. Lägg till motsvarande -keep regler i ditt eget program ProguardConfiguration som en lösning.