Android 8.1 Nexus 5X偶发Resources$NotFoundException资源加载失败问题求助
根因排查方向
1. 同资源名多格式多目录冲突
你当前为button_close_grey_24dp配置了两份同名不同格式、不同目录的资源:
drawable目录下的png文件drawable-nodpi目录下的矢量xml文件
Android系统加载资源时,会按照设备density匹配最优资源,nodpi是不受密度影响的通用资源,优先级高于无qualifier的drawable目录,系统会优先尝试加载nodpi下的矢量xml,不会降级加载png,你之前认为的“矢量图有问题就会加载png”的逻辑不成立。
2. Android 8.1 矢量图加载已知BUG
Nexus 5X搭载的Android 8.1存在系统级的矢量图加载异常场景:当矢量图放在drawable-nodpi目录、且在selector中被引用时,部分场景下系统解析资源ID会出现偏移,就是你日志里出现的找不到0x7f08006e这个ID的问题,这个BUG仅在特定系统镜像、特定资源配置组合下触发,所以只有单个用户报错。
3. App Bundle 分拆下发异常
如果你用了App Bundle打包分发,Google Play会根据设备属性下发对应资源拆分包,如果用户设备的资源拆分包下载异常、或者安装时出现资源表损坏,也会出现单个资源找不到的问题,该问题只会出现在单台设备上。
修复方案
- 首先删除重复的同名资源:要么保留png版本删除
nodpi下的矢量图,要么把矢量图移到通用drawable目录删除png版本,不要同时存在两份同名不同格式的资源 - 如果要保留矢量图,建议在build.gradle中开启矢量图兼容配置,不管系统版本高低统一用兼容库加载矢量图:
android { defaultConfig { vectorDrawables.useSupportLibrary = true } }
- 如果你使用了App Bundle,可以在Play Console后台查看该用户的拆分包下发记录,确认是否存在资源包缺失的情况,也可以开启资源打包时的完整性校验,避免安装时资源表损坏。
内容的提问来源于stack exchange,提问作者Kenny Wyland
相关产品推荐
相关产品推荐

