Xamarin.Android迁移AndroidX后出现R8编译失败异常如何解决
问题根因
该R8编译失败的核心触发点是com.google.android.gms.actions.ItemListIntents类在编译压缩阶段出现解析异常,Xamarin.Android项目迁移AndroidX后出现该问题,90%以上场景由三类原因导致:GMS(Google Play服务)依赖版本不匹配、旧版非AndroidX依赖残留、R8混淆规则缺失。
排查解决步骤
- 统一GMS依赖版本
打开Android项目的NuGet包管理面板,检查所有Xamarin.GooglePlayServices.*前缀的包,全部升级到适配AndroidX的稳定版本,禁止同系列GMS包跨大版本混用(例如部分包用71.x版本、部分用118.x版本)。其中Xamarin.GooglePlayServices.Actions是ItemListIntents类的直接归属包,优先确认该包版本和项目内其他AndroidX、GMS包版本对齐。 - 清理冗余编译缓存
关闭开发IDE,手动删除Android项目目录下的bin、obj文件夹,同时清理本地NuGet全局缓存中残留的旧版本GMS、Support包文件,重新打开项目还原NuGet依赖后尝试首次编译,排除旧缓存被错误加载的问题。 - 补全R8/ProGuard配置规则
如果对齐版本后仍报错,在Android项目的ProGuard配置文件(默认文件名为proguard.cfg)中添加如下规则,避免R8压缩阶段误处理GMS相关类:
添加规则后需要确认配置文件的生成操作属性设置为-keep class com.google.android.gms.actions.** { *; } -dontwarn com.google.android.gms.actions.**ProguardConfiguration,确保项目开启R8压缩时自定义规则能被正常读取。 - 清理残留旧版Support依赖
在包管理器控制台执行依赖检查命令,排查项目内是否残留未迁移的旧版Xamarin.Android.Support.*包:
如果存在残留包全部卸载,统一替换为对应的AndroidX版本,避免旧版Support包和AndroidX包共存引发类冲突。Get-Package | Where-Object {$_.Id -like "*Xamarin.Android.Support*"}
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

