Android 12设备出现Resources$NotFoundException资源异常如何解决
核心异常根因
该崩溃发生在Android 12设备上Chromium内核启动阶段,org.chromium.ui.base.DeviceFormFactor.isTablet方法尝试读取系统内置整数资源config_smallestScreenWidthDp(对应报错的资源ID0x20c0025)时触发资源找不到异常。
排查思路
- 检查App打包配置:确认是否开启了
shrinkResources true资源收缩或者过度的资源混淆,导致系统资源引用被误裁剪 - 核对Chromium/WebView版本:确认当前使用的Chromium自定义内核版本,或是崩溃设备上的系统WebView版本是否低于96,该版本以下未适配Android 12的资源解析逻辑
- 排查设备ROM情况:确认崩溃是否集中在特定定制ROM的设备上,部分厂商定制ROM会裁剪系统内置的平板判断相关配置资源
- 验证SDK适配版本:检查当前App的
compileSdkVersion和targetSdkVersion是否低于31,低版本SDK编译的应用在Android12上读取系统资源可能出现适配问题
解决方案
- 修复资源裁剪规则
- 在
proguard-rules.pro中添加Chromium相关组件的混淆保护规则:
-keep class org.chromium.** {*;} -keepclassmembers class * { @android.webkit.JavascriptInterface <methods>; }- 若开启了资源收缩,在
res/raw/keep.xml中添加规则保留相关系统资源:
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@android:integer/config_smallestScreenWidthDp"/> - 在
- 升级内核版本:如果使用自定义Chromium内核,将版本升级至96及以上,官方已在该版本修复Android 12资源适配问题;如果使用系统WebView,可在App启动时检测WebView版本,低于要求时提示用户升级
- 添加兜底逻辑:在WebView初始化逻辑外层添加
try-catch捕获Resources$NotFoundException,捕获后使用自主实现的平板判断逻辑兜底:读取当前设备的smallestScreenWidthDp,若数值≥600则判定为平板,不需要调用Chromium内置的判断方法 - 升级SDK适配版本:将App的
compileSdkVersion和targetSdkVersion升级到31及以上,同时确保所有AndroidX依赖库版本与目标SDK版本匹配
内容的提问来源于stack exchange,提问作者Ashu Tyagi
相关产品推荐
相关产品推荐

