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

API 23及以下版本启动时触发android.content.res.Resources$NotFoundException怎么解决?

解决API23及以下版本菜单加载崩溃的问题

嘿,这个坑我之前踩过!只测高版本确实容易忽略低版本的资源兼容问题,结合你说的报错是Resources相关,给你几个具体的排查和修复方向:

  • 检查菜单资源的属性兼容性
    API23及以下对AppCompat属性和矢量图的支持有限:

    • 如果菜单里用了矢量图标,一定要在模块的build.gradle(Module级)里添加配置:
      android {
          defaultConfig {
              vectorDrawables.useSupportLibrary = true
          }
      }
      
      同时在Application的onCreate()方法里开启兼容:
      AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
      
    • 菜单中的showAsAction属性,要同时兼容旧版和新版,比如:
      <item
          android:id="@+id/action_settings"
          android:title="@string/action_settings"
          android:showAsAction="ifRoom"
          app:showAsAction="ifRoom"/>
      
  • 切换到AppCompat的MenuInflater
    如果你当前继承的是Activity而非AppCompatActivity,低版本系统的原生MenuInflater无法解析AppCompat相关的菜单属性。建议改成继承AppCompatActivity,然后用兼容的菜单加载方法:

    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.actionbar_menu, menu);
    

    这一步是很多人忽略的关键点,我当初就是因为用了原生getMenuInflater()在API22上崩溃了。

  • 排查资源文件的版本限制
    检查R.menu.actionbar_menu里引用的所有资源(图标、字符串、样式等),有没有标记为仅API24+可用的(比如放在drawable-v24、layout-v24目录下,或者XML里用了tools:targetApi="24")。如果有,要么复制一份兼容版到通用目录,要么调整资源属性让它支持低版本。

  • 解析完整的异常日志
    你提到的android.content.res.Resources$...报错,完整的异常信息(比如NotFoundException、XmlPullParserException)能精准定位问题:

    • 如果是NotFoundException:说明某个资源在低版本系统中找不到,检查资源的目录结构和引用路径
    • 如果是XmlPullParserException:说明菜单XML里有低版本不支持的标签或属性,比如某些仅高版本可用的XML属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:31:04