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

Android SplashScreen API在Android≤9设备上崩溃问题求助

问题背景
  • 应用闪屏迁移至新SplashScreen API后,Android 13设备运行正常,但Android 9模拟器启动即崩溃。
  • 核心崩溃错误:
Caused by: java.lang.IllegalArgumentException: R is not a valid verb. Failure occurred at position 2 of path: STRING_TOO_LARGE
  • 替换为简单SVG图标后模拟器可正常运行,但无法获取路径更短的目标SVG Logo,寻求Android 9及以下设备的解决办法。
完整崩溃日志
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.iku.test/com.iku.intro.splash.SplashActivity}: android.content.res.Resources$NotFoundException: Drawable com.iku.test:drawable/compat_splash_screen_no_icon_background with resource ID #0x7f0800a1
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.content.res.Resources$NotFoundException: Drawable com.iku.test:drawable/compat_splash_screen_no_icon_background with resource ID #0x7f0800a1
Caused by: android.content.res.Resources$NotFoundException: Drawable com.iku.test:drawable/iku_new_splash with resource ID #0x7f080215
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/iku_new_splash.xml from drawable resource ID #0x7f080215
    at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:847)
    at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:631)
    at android.content.res.Resources.loadDrawable(Resources.java:897)
    at android.content.res.TypedArray.getDrawableForDensity(TypedArray.java:955)
    at android.content.res.TypedArray.getDrawable(TypedArray.java:930)
    at android.graphics.drawable.LayerDrawable.updateLayerFromTypedArray(LayerDrawable.java:382)
    at android.graphics.drawable.LayerDrawable.applyTheme(LayerDrawable.java:224)
    at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:646)
    at android.content.res.Resources.getDrawableForDensity(Resources.java:888)
    at android.content.res.Resources.getDrawable(Resources.java:827)
    at android.content.Context.getDrawable(Context.java:626)
    at androidx.core.content.ContextCompat$Api21Impl.getDrawable(ContextCompat.java:1012)
    at androidx.core.content.ContextCompat.getDrawable(ContextCompat.java:522)
    at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:149)
    at androidx.appcompat.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:480)
    at androidx.appcompat.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:94)
    at androidx.appcompat.app.AppCompatDelegateImpl.attachToWindow(AppCompatDelegateImpl.java:807)
    at androidx.appcompat.app.AppCompatDelegateImpl.ensureWindow(AppCompatDelegateImpl.java:783)
    at androidx.appcompat.app.AppCompatDelegateImpl.onCreate(AppCompatDelegateImpl.java:506)
    at androidx.appcompat.app.AppCompatActivity$2.onContextAvailable(AppCompatActivity.java:131)
    at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.java:99)
    at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:352)
    at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:217)
    at com.iku.intro.splash.SplashActivity.onCreate(SplashActivity.kt:24)
    at android.app.Activity.performCreate(Activity.java:7136)
    at android.app.Activity.performCreate(Activity.java:7127)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.IllegalArgumentException: R is not a valid verb. Failure occurred at position 2 of path: STRING_TOO_LARGE
    at android.util.PathParser.nCreatePathDataFromString(Native Method)
    at android.util.PathParser.access$200(PathParser.java:24)
    at android.util.PathParser$PathData.<init>(PathParser.java:76)
    at android.graphics.drawable.VectorDrawable$VFullPath.updateStateFromTypedArray(VectorDrawable.java:2016)
    at android.graphics.drawable.VectorDrawable$VFullPath.inflate(VectorDrawable.java:1967)
    at android.graphics.drawable.VectorDrawable.inflateChildElements(VectorDrawable.java:819)
    at android.graphics.drawable.VectorDrawable.inflate(VectorDrawable.java:717)
    at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:142)
    at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1332)
    at android.graphics.drawable.Drawable.createFromXmlForDensity(Drawable.java:1291)
    at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:833)
    ... 38 more
可行解决办法

1. 拆分并优化SVG路径

Android 9及以下的VectorDrawable对单条路径长度有解析限制,可通过SVG编辑工具(如Figma、Inkscape)处理:

  • 打开目标SVG,定位到报错的长路径
  • 将单条长路径拆分为多条独立子路径
  • 删除冗余路径指令(如重复的闭合指令、过度精确的小数点),保留核心路径信息

2. 分版本提供图标资源

针对不同系统版本提供对应格式的图标,绕过旧系统的SVG解析问题:

  • 在res/drawable-v28/目录下保留原SVG图标,供Android 10及以上设备使用
  • 在res/drawable/目录下放置对应分辨率的PNG格式图标,适配Android 9及以下设备
  • 确保SplashScreen配置中引用的drawable资源会自动适配资源目录

3. 升级兼容库优化解析

更新androidx相关依赖,利用VectorDrawableCompat的兼容解析逻辑:

  • 在项目的build.gradle(Module级别)中更新依赖版本:
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.12.0'
  • 若直接在布局中引用图标,使用app:srcCompat替代android:src属性

4. 压缩SVG文件

使用SVGO等工具压缩SVG,减少路径长度和冗余代码:

  • 运行压缩命令(需提前安装SVGO):
svgo input.svg -o output.svg
  • 压缩后验证图标视觉效果无变化,再替换原资源

内容的提问来源于stack exchange,提问作者Abhishek AN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:50:24