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

Android应用崩溃:系统查找不存在的drawable-nodpi-v4目录

问题分析与解决方案

为什么系统会尝试访问不存在的drawable-nodpi-v4目录?

Android资源系统处理资源时,会根据设备API版本和配置自动生成带版本后缀的资源目录标识,-v4代表适配API Level 4及以上的设备。这里的核心原因是:

  • 你将image_uparrow.xml放在drawable-nodpi目录,Android构建工具(aapt/aapt2)打包时,会把无版本限定的资源目录,映射为最低兼容API版本的资源标识(nodpi目录默认对应API Level 4,因此会被标记为drawable-nodpi-v4)。
  • 崩溃并非真的是目录不存在,而是资源打包或加载出现异常,导致系统解析资源ID时指向了这个“虚拟”的版本化路径。

结合你的场景,额外诱因包括:

  1. 冗余的单条目Selector:这个Selector仅引用一个默认drawable,完全多余,既增加了资源加载层级,还可能在部分设备上触发资源解析的异常路径。
  2. 资源密度覆盖不全:uparrow.png只有mdpi和hdpi版本,缺少xhdpi/xxhdpi等更高密度版本,也没有默认drawable目录的版本,高分辨率设备上系统会尝试从nodpi目录查找资源,进而引发连锁问题。

修复步骤

1. 移除冗余Selector文件

直接删除res/drawable-nodpi/image_uparrow.xml,修改样式直接引用@drawable/uparrow:

<style name="Cashflow.ReorderButton.Up">
    <item name="android:src">@drawable/uparrow</item>
</style>

彻底消除Selector带来的资源加载层级问题。

2. 补全资源密度版本

为uparrow.png添加全密度适配版本:

  • res/drawable-xhdpi/uparrow.png
  • res/drawable-xxhdpi/uparrow.png
  • res/drawable-xxxhdpi/uparrow.png
    或者直接将一份高清版本放入res/drawable/目录(默认密度目录),让系统自动缩放适配所有设备。

3. 清理构建缓存

彻底清除旧资源缓存,避免打包异常:

  • Android Studio操作:点击File > Invalidate Caches... > Invalidate and Restart
  • 命令行操作:运行./gradlew clean build(Windows环境用gradlew.bat clean build)

验证方案

修改完成后重新打包,重点在不同API版本、不同分辨率的设备上测试,确认ImageButton能正常加载资源,不再出现Resources$NotFoundException异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:07:19