VS2022 Xamarin Android13下如何启用ProGuard代码收缩工具?
Xamarin Android 13 + VS2022下ProGuard启用冲突解决办法
问题本质
现在Xamarin Android已经强制用D8当默认DEX编译器了,旧的DX编译器直接被废弃,根本没法用;而D8只认R8作为代码收缩工具,ProGuard和D8的组合早就被官方砍掉支持了,所以你才会碰到这两个互相矛盾的错误。
官方推荐的替代方案:转用R8
R8是ProGuard的官方继任者,完全兼容你之前写的ProGuard规则文件,优化效果还更强,操作步骤也简单:
1. 通过VS项目属性配置
- 右键你的Xamarin Android项目,点「属性」
- 切到「Android Options」里的「Packaging」标签页
- 在「Code shrinker」下拉框选择**「R8」**
- 确认「DEX compiler」选项是**「D8」**(默认就是这个,要是被修改过改回来就行)
2. 手动编辑项目文件(.csproj)
要是属性页配置没生效,直接编辑项目文件:
- 找到文件中的
<PropertyGroup>节点,添加或修改以下两行:<AndroidLinkTool>r8</AndroidLinkTool> <AndroidDexTool>d8</AndroidDexTool>
3. 复用原有ProGuard规则
之前的proguard.cfg或者proguard-rules.pro不用重新编写,只要把文件的「生成操作」设置为**「ProGuardConfiguration」**,R8会自动读取并应用这些规则。
若坚持使用ProGuard(不推荐)
由于DX已被废弃且Android 13不兼容旧工具链,硬要使用ProGuard只能采取以下风险极高的操作:
- 降级Xamarin Android SDK版本到Android 11及以下,且需确保对应版本支持ProGuard+DX组合
- 但此方法会导致应用无法适配Android 13的新特性,存在严重的稳定性和安全性隐患,不建议采用
内容的提问来源于stack exchange,提问作者Udin M
相关产品推荐
相关产品推荐

