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

Xamarin.Forms开发Android12应用归档时遇KeyNotFoundException求助

问题原因及解决方法

原因分析

归档(Release打包)与调试模式的构建逻辑差异是核心问题:

  • 调试模式下资源和代码不会被压缩、混淆,主题依赖的所有资源都能正常加载;
  • 归档时会启用ProGuard/R8混淆和资源收缩,Theme.AppCompat.DayNight.NoActionBar继承链中的某些隐性资源被误过滤,导致运行时找不到对应Key触发异常。

解决方法

  • 调整ProGuard/R8配置,保护AppCompat资源
    在Android项目的ProGuard.cfg文件中添加以下规则,避免AppCompat相关类和资源被混淆或移除:

    -keep class android.support.v7.** { *; }
    -keep interface android.support.v7.** { *; }
    -keep class androidx.appcompat.** { *; }
    -keep interface androidx.appcompat.** { *; }
    -keepattributes *Annotation*
    
  • 确保AppCompat库引用正确
    检查NuGet包管理器,确认已安装适配Android 12的Xamarin.AndroidX.AppCompat稳定版,版本建议和目标SDK版本匹配,避免版本兼容问题。

  • 显式声明主题必要属性
    在Resources/values/styles.xml中,继承Theme.AppCompat.DayNight.NoActionBar后,手动添加核心主题属性,避免归档时资源缺失:

    <style name="MainTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primaryDark</item>
        <item name="colorAccent">@color/accent</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
    
  • 清理重建项目
    手动删除Android项目下的bin和obj文件夹,重启Visual Studio后重新编译,再尝试归档操作,排除缓存导致的异常。

  • 临时关闭资源收缩测试
    打开Android项目属性 → Android Options → Packaging,取消勾选“Use Resource Shrinking”,测试是否能正常归档。如果正常,再逐步调整资源收缩的白名单规则,避免过度过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:55:15