如何修复Resources$NotFoundException异常及Chromium组件相关疑问
崩溃问题分析与修复建议
一、崩溃触发原因推测
从崩溃栈来看,核心错误是Resources$NotFoundException: Resource ID #0x20c003b——Chromium框架尝试获取的某个系统整数资源,在当前设备的系统资源库中不存在。
具体触发路径为:当Chromium的SelectionPopupControllerImpl启动文本选择操作模式时,会调用DeviceFormFactor类读取该系统资源,而部分设备(尤其是定制ROM或系统版本不匹配的机型)缺失这个资源,最终引发崩溃。简言之:文本选择弹窗触发时,Chromium依赖的系统资源在特定设备上找不到,导致崩溃。
二、org.chromium.content.browser.selection.SelectionPopupControllerImpl类及方法说明
- SelectionPopupControllerImpl类:是Chromium内核中负责管理文本选择后操作菜单(比如复制、粘贴、全选等)的核心类,主要处理文本选择区域检测、弹窗显隐控制、交互事件分发等逻辑。
- B方法(对应栈中第489行):作用是启动文本选择的操作模式(ActionMode),触发系统级文本选择工具栏的显示,是连接Chromium选择逻辑与系统UI的关键步骤。
三、修复建议
- 兼容系统资源差异:针对崩溃设备,在调用
Resources.getInteger前先做资源存在性校验,避免抛出异常:try { Resources.getInteger(0x20c003b); } catch (Resources.NotFoundException e) { // 使用预设默认值替代,或根据设备类型手动设置参数 } - 升级Chromium内核:如果使用的是较旧的Chromium分支,尝试升级到稳定版,新版本通常会修复这类系统资源依赖的兼容性问题。
- 拦截文本选择逻辑:如果业务场景不需要Chromium默认的选择弹窗,可以通过自定义WebView拦截文本选择事件,避免触发
SelectionPopupControllerImpl的相关流程。 - 补充系统资源:若为可控的自定义ROM设备,检查是否缺失Android标准资源,补充对应资源文件(仅适用于自有设备环境)。
崩溃日志:
Fatal Exception: android.content.res.Resources$NotFoundException: Resource ID #0x20c003b at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:264) at android.content.res.Resources.getInteger(Resources.java:1201) at org.chromium.ui.base.DeviceFormFactor.a(DeviceFormFactor.java:107) at R8.onCreateActionMode(R8.java:722) at com.android.internal.policy.DecorView$ActionModeCallback2Wrapper.onCreateActionMode(DecorView.java:2840) at com.android.internal.policy.DecorView.startActionMode(DecorView.java:1012) at com.android.internal.policy.DecorView.startActionModeForChild(DecorView.java:968) at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:1033) at android.view.View.startActionMode(View.java:7774) at org.chromium.content.browser.selection.SelectionPopupControllerImpl.B(SelectionPopupControllerImpl.java:489) at di0.a(di0.java:1587) at Fl0.i(Fl0.java:259) at T6.run(T6.java:454) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:264) at android.app.ActivityThread.main(ActivityThread.java:8312) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)
内容的提问来源于stack exchange,提问作者Vikas Pandey
相关产品推荐
相关产品推荐

