You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用R8后Android 6.0设备MAUI应用崩溃:缺失OnBackInvokedCallback类

解决.NET MAUI启用R8后Android 6.0(API23)崩溃(缺失OnBackInvokedCallback类)问题

问题根源

android.window.OnBackInvokedCallback是Android 13(API33)才引入的系统类,你使用的AndroidX Activity 1.6.x版本依赖了这个类,但原本通过兼容层在低API设备上运行。启用R8后,代码收缩过程误删了低版本兼容逻辑,导致应用在API23设备上找不到该类而崩溃。

解决方案

1. 添加R8混淆规则

在Android项目根目录(Properties/AndroidManifest.xml所在目录)创建proguard.cfg文件,写入以下规则:

-keep class android.window.OnBackInvokedCallback { *; }
-keep class androidx.activity.OnBackPressedDispatcher { *; }
-keep class androidx.activity.OnBackPressedCallback { *; }
-keep class androidx.activity.ComponentActivity { *; }

然后在Visual Studio中:

  • 右键Android项目 → 属性 → Android选项 → 打包
  • 勾选“启用代码收缩和混淆(R8)”
  • 在“自定义混淆文件”中选择刚创建的proguard.cfg

2. 降级AndroidX Activity依赖包

AndroidX Activity 1.6.x对低API设备兼容性较差,尝试降级到1.5.2版本,同时同步调整相关依赖:

  • Xamarin.AndroidX.Activity 1.5.2
  • Xamarin.AndroidX.Activity.Ktx 1.5.2
    降级时注意同步更新其他关联NuGet包,避免版本冲突。

3. 调整API级别设置

  • 确认项目最低API级别为23,目标API级别设置为33或更高(R8需要足够高的目标API来处理新类的兼容逻辑)
  • 路径:项目属性 → Android选项 → 应用程序 → 最低Android版本/目标Android版本

4. 禁用R8严格模式(临时应急方案)

如果以上方法无效,可在项目的.csproj文件中添加以下配置:

<PropertyGroup>
  <AndroidR8EnableStrictMode>false</AndroidR8EnableStrictMode>
</PropertyGroup>

该配置会降低R8对缺失类的检查严格度,避免误删兼容代码。

验证步骤

  • 清理解决方案,手动删除项目的bin和obj目录
  • 重新构建Release版本,在API23实体设备上测试

内容的提问来源于stack exchange,提问作者YouBT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:46:11