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

Android应用仅生产环境出现Resources$NotFoundException资源加载异常

Android应用生产环境(Play Store安装)资源找不到问题排查与解决

问题描述

我的Android Java应用仅在生产环境出现问题:通过Android Studio直接安装到手机时一切正常,但通过Play Store更新同一款手机上的应用后,抛出如下异常:

Process: com.iddeos.planningbuilder, PID: 31989
android.content.res.Resources$NotFoundException: Resource ID #0x0

问题出自以下代码:

int iconRessource = getResources().getIdentifier("drawable/"+menu.getIcon(), "drawable", getPackageName());
Drawable image = ContextCompat.getDrawable(getApplicationContext(), iconRessource);
menuBottomConfig.add(android.view.Menu.NONE, menu.getId(), android.view.Menu.NONE, menu.getTitle()).setIcon(image);

核心原因

  1. Play Store资源优化误删动态引用资源:Play Store默认会对发布的应用做资源压缩,移除静态分析认为“未被引用”的资源。而getIdentifier是动态获取资源,静态检测工具识别不到这些引用,导致图标资源被误删。Android Studio直接安装的debug包不会开启严格的资源压缩,所以不会出现这个问题。
  2. getIdentifier参数错误:第一个参数不需要加drawable/前缀,第二个参数已经指定了资源类型为drawable,加前缀会导致无法匹配到正确的资源ID,返回0(即0x0),最终触发找不到资源的异常。

解决步骤

  • 修正getIdentifier调用:
    去掉前缀,正确写法如下:

    int iconRessource = getResources().getIdentifier(menu.getIcon(), "drawable", getPackageName());
    
  • 阻止资源被误删:
    在res/raw/目录下创建keep.xml文件,标记需要保留的动态引用图标资源:

    <?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:tools="http://schemas.android.com/tools"
        tools:keep="@drawable/icon_name1,@drawable/icon_name2" />
    

    如果是批量图标,可使用通配符(比如@drawable/menu_icon_*),确保所有动态调用的图标都被保留。

  • 增加容错逻辑:
    在代码里判断资源是否存在,避免崩溃:

    int iconRessource = getResources().getIdentifier(menu.getIcon(), "drawable", getPackageName());
    if (iconRessource != 0) {
        Drawable image = ContextCompat.getDrawable(getApplicationContext(), iconRessource);
        menuBottomConfig.add(android.view.Menu.NONE, menu.getId(), android.view.Menu.NONE, menu.getTitle()).setIcon(image);
    } else {
        // 资源不存在时用默认图标兜底
        menuBottomConfig.add(android.view.Menu.NONE, menu.getId(), android.view.Menu.NONE, menu.getTitle()).setIcon(R.drawable.default_menu_icon);
    }
    
  • 本地验证release包:
    本地打包release版本安装到手机测试,确认问题是否解决,不要只依赖debug包测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:36:33