三星Galaxy设备启动报SplashScreen Drawable资源找不到崩溃
问题复现与报错信息
- 复现设备范围:仅在三星Galaxy系列设备出现,覆盖机型包括Galaxy Tab A、Galaxy A03 Core、Galaxy A02、Galaxy A32
- 崩溃堆栈:
Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.application/com.myapp.application.ui.MainActivity}: android.content.res.Resources$NotFoundException: Drawable com.app.application:drawable/compat_splash_screen_no_icon_background with resource ID #0x7f0801b6
- 异常特征:报错指向的
compat_splash_screen_no_icon_background为AndroidX SplashScreen兼容库内置只读资源,资源本身在依赖包内存在,并非依赖缺失导致。
现有启动页配置
当前使用的启动页主题配置如下:
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools"> <style name="Theme.App.Starting" parent="Theme.SplashScreen"> <item name="windowSplashScreenBackground">@color/white</item> <item name="windowSplashScreenAnimatedIcon">@drawable/splash_icon</item> <item name="postSplashScreenTheme">@style/Theme.Triva.NoActionBar</item> <item name="windowSplashScreenIconBackgroundColor">@color/blue</item> <item name="windowSplashScreenAnimationDuration">800</item> <item name="android:forceDarkAllowed" tools:targetApi="q">false</item> </style> </resources>
触发原因
该问题为三星One UI特定版本 + 低版本AndroidX SplashScreen兼容库共同导致的兼容bug:
core-splashscreen1.0.0系列预览/RC版本存在分支判断缺陷,在部分三星系统上,即使开发者已经配置了windowSplashScreenAnimatedIcon参数,代码仍会错误走到「无启动图标」的启动页加载分支,尝试加载compat_splash_screen_no_icon_background资源。- 三星部分中低端机型的系统资源裁剪逻辑存在问题,会将依赖库中标记为「备用场景使用」的该drawable资源错误裁剪,导致资源查找时抛出
Resources$NotFoundException。
修复方案
按优先级依次尝试即可:
- 升级依赖版本:将
androidx.core:core-splashscreen依赖升级到1.0.1或更高稳定版,官方已在该版本修复了厂商设备上的分支判断错误,不会在配置了启动图标的场景下错误加载无图标分支的背景资源。 - 资源兜底覆盖:如果受限于项目依赖版本无法升级,直接在项目自身的
drawable目录下新建同名compat_splash_screen_no_icon_background.xml资源,内容与启动页背景保持一致即可,示例代码:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/white"/> </shape>
该方案属于静态覆盖,不会影响正常启动页的展示逻辑,哪怕系统错误走到该资源加载分支也能正常读取资源,彻底规避崩溃。
- 补全主题属性:如果上述方案仍存在极个别机型偶现,可以在启动主题中显式补充品牌图配置,彻底阻断无图标分支的触发逻辑,在
Theme.App.Starting样式下新增配置项:
<item name="windowSplashScreenBrandingImage">@drawable/splash_icon</item>
内容的提问来源于stack exchange,提问作者Kunal Kalwar
相关产品推荐
相关产品推荐

