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

API 19以下启动应用崩溃:Resources$NotFoundException等异常求助

解决API 19以下版本因矢量Drawable崩溃的问题

嘿,这个问题我之前帮不少开发者搞定过,虽然你说主布局里没有ImageView,但崩溃的根源肯定是你的应用里用到了ic_bluetooth.xml这个矢量Drawable,而Android 4.4(API19)及以下系统原生不支持直接引用矢量图——哪怕是在菜单栏、ActionBar图标或者某个子布局里的引用,都会触发这个Resources$NotFoundException。

下面是两种靠谱的解决办法,你可以根据自己的项目情况选:

办法一:用AppCompat库做兼容(推荐)

这是最省事的方案,利用AndroidX的AppCompat库让低版本系统支持矢量Drawable:

  • 首先确保你的Activity继承自AppCompatActivity(别用原生的Activity),并且App主题继承自Theme.AppCompat系列(比如Theme.AppCompat.Light.NoActionBar)
  • 打开模块级的build.gradle文件,在defaultConfig里添加矢量兼容配置:
android {
    defaultConfig {
        // 启用矢量Drawable的支持库兼容
        vectorDrawables.useSupportLibrary = true
    }
}
  • 所有引用矢量图的地方,替换成兼容的引用方式:
    • 如果是ImageView,把android:src="@drawable/ic_bluetooth"改成app:srcCompat="@drawable/ic_bluetooth"
    • 如果是菜单栏的MenuItem,在菜单xml里用app:icon代替android:icon,示例:
      <item
          android:id="@+id/action_bluetooth"
          android:title="@string/action_bluetooth"
          app:icon="@drawable/ic_bluetooth"
          app:showAsAction="ifRoom"/>
      

办法二:生成低版本兼容的PNG图片

如果你不想依赖AppCompat库,可以给矢量图生成对应的PNG位图,让低版本系统加载位图资源:

  • 右键点击res/drawable/ic_bluetooth.xml文件,选择New > Vector Asset
  • 在弹出的窗口里,勾选Generate PNG选项,然后选择需要生成的dpi规格(hdpi、mdpi、xhdpi等)
  • 生成的PNG图片会自动放到对应的drawable-hdpi、drawable-mdpi等目录下,低版本系统会优先加载这些PNG资源,避免找不到矢量图的问题

额外排查小提示

  • 检查是否有自定义View或者代码里直接加载了这个矢量图,如果有的话,改用AppCompatResources.getDrawable(context, R.drawable.ic_bluetooth)来获取Drawable,而不是原生的getResources().getDrawable()
  • 确认你的AndroidManifest.xml里,Activity的theme没有用原生的Theme.Holo系列,必须用AppCompat的主题才能让兼容生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:58:22