.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)提供了一个proguard.txt文件(“使用者 ProGuard 配置”),其中包含全局 ProGuard 选项,例如-dontoptimize、-dontobfuscate、-printmapping、-printconfiguration-printusage、或-printseeds-dump。

这些选项控制整个生成(例如,R8 写入映射文件的位置),并且只能由使用库的应用程序项目设置。 它们不允许进入 .aar 的 proguard.txt 内部。 这与 Android Gradle Plugin 9.0 中引入的行为一致:当此类全局选项出现在预编译依赖项(JAR 或 AAR)中时,R8 要么会导致库发布失败,要么会静默忽略这些选项。 为保证构建正常进行,.NET for Android 会在调用 R8 之前跳过整个有问题的文件,并发出此警告。

解决方案

如果拥有库,请从其 proguard.txt / ProguardConfiguration 项中删除全局选项,而是在应用程序项目自己的 ProguardConfiguration 项中设置它们(例如,通过设置 $(AndroidProguardMappingFile) 来控制映射文件写入的位置)。 移除全局选项后,该库的 keep 规则将再次传递给 R8。

如果你不拥有该库,请提交其维护者的问题,并要求他们删除不允许的选项。 在此之前,R8 不会看到此库 proguard.txt的任何保留规则,这可能会导致所需的代码被收缩。 作为一种变通方法,将等效的 -keep 规则添加到您自己的应用程序的 ProguardConfiguration 中。