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

APK启动时弹出“持续停止运行”提示且logcat报错如何修复?

APK启动时Resources$NotFoundException排查与修复方案

你遇到的报错是android.content.res.Resources$NotFoundException,本质是App运行时尝试加载不存在的资源文件触发的崩溃,可按以下步骤排查修复:

排查步骤

  • 核对资源文件是否存在
    检查报错日志里指向的资源ID对应的文件,重点查看drawable、layout、values等资源目录下,是否存在对应名称的文件,注意区分大小写,Android资源命名对大小写敏感,比如ic_back.png和Ic_back.png会被识别为不同资源。
  • 检查资源限定词适配问题
    如果你把资源只放在了特定限定词的目录下(比如仅放在drawable-xxhdpi、values-v31这类目录),在低于对应版本、不符合限定词的设备上运行时,就会找不到资源。需要确认资源是否在默认目录(比如drawable、values)下也有备份,或者适配范围覆盖了你的App支持的最低设备版本。
  • 排查构建缓存问题
    有时候构建缓存异常会导致资源没有被正确打包进APK,先执行./gradlew clean清理缓存后重新打包,再安装测试是否复现。
  • 检查动态加载资源逻辑
    如果你的代码里有用Resources.getIdentifier()动态获取资源ID,核对传入的资源名称、类型、包名是否正确,这类方法如果传参错误会返回0,直接用0作为资源ID加载就会触发该异常。
  • 核对混淆配置
    如果你开启了资源混淆(比如用了AndResGuard),检查是否有资源被错误混淆移除,或者保留规则配置错误导致需要的资源被裁剪。

通用修复方案

  • 缺失的资源直接补到对应目录,严格按照小写+下划线的命名规范,避免大小写问题。
  • 特殊版本限定的资源,要在默认目录下放兜底的资源文件,避免低版本设备找不到。
  • 动态获取资源的代码处增加判空逻辑:
    int resId = getResources().getIdentifier("res_name", "drawable", getPackageName());
    if (resId != 0) {
        // 正常加载资源
    } else {
        // 加载兜底资源或者走异常处理逻辑
    }
    
  • 资源混淆配置文件中添加需要保留的资源白名单,避免合规资源被误裁剪。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 12:54:02