.NET for Android の警告 XA4322

メッセージの例

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) には、-dontoptimize、-dontobfuscate、-printmapping、-printconfiguration、-printusage、-printseeds、-dumpなどのグローバル ProGuard オプションを含むproguard.txt ファイル ("コンシューマー ProGuard 構成") が付属しています。

これらのオプションは、ビルド全体 (たとえば、R8 がマッピング ファイルを書き込む場所) を制御し、ライブラリを使用するアプリケーション プロジェクトによってのみ設定する必要があります。 .aarのproguard.txt内では使用できません。 これは 、Android Gradle Plugin 9.0 で導入された動作と一致します。R8 はライブラリの発行に失敗するか、事前コンパイル済みの依存関係 (JAR または AAR) に表示されるときにこのようなグローバル オプションを自動的に無視します。 ビルドを動作させ続けるために、Android 用の.NETは、R8 を呼び出す前に問題のあるファイル全体をスキップし、この警告を出力します。

ソリューション

ライブラリを所有している場合は、その proguard.txt / ProguardConfiguration 項目からグローバル オプションを削除し、代わりにアプリケーション プロジェクトの独自の ProguardConfiguration に設定します (たとえば、マッピング ファイルの書き込み先を制御する $(AndroidProguardMappingFile) を設定します)。 グローバル オプションが削除されると、ライブラリの keep ルールが再び R8 に渡されます。

ライブラリを所有していない場合は、その保守担当者に問題を提出し、許可されていないオプションを削除するよう依頼します。 それまでは、R8 には、このライブラリの proguard.txtからのキープ ルールは表示されず、必要なコードが圧縮される可能性があります。 回避策として、独自のアプリケーションのProguardConfigurationに同等の-keepルールを追加します。