範例訊息
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、 -printseeds-printmapping-printusage-printconfiguration-dump。
這些選項控制整個建置(例如 R8 撰寫映射檔案),且必須由使用函式庫的應用程式專案設定。 它們不得進入 .aar 的 proguard.txt 內部。 這與 Android Gradle Plugin 9.0 中引入的行為一致:當這類全域選項出現在預先編譯的相依項目(JAR 或 AAR)中時,R8 要麼會使函式庫發佈失敗,要麼會默默忽略這些選項。 為了讓你的建置正常運作,Android 版 .NET 會跳過整個問題檔案,然後才啟動 R8,並發出此警告。
解決方案
如果你擁有函式庫,請移除其 proguard.txt /
ProguardConfiguration 項目中的全域選項,改為在應用程式專案中 ProguardConfiguration 設定(例如,透過設定 $(AndroidProguardMappingFile) 控制映射檔案的寫入位置)。
一旦移除全域選項,函式庫的 keep 規則將再次傳遞給 R8。
如果你不擁有該函式庫,請向維護者提出申訴,並要求他們移除不允許的選項。 在此之前,R8 不會看到該函式庫 proguard.txt中的任何 Keep 規則,這可能會導致所需程式碼被縮減。 在你自己的應用程式ProguardConfiguration中加入等效-keep的規則作為變通方法。