Jetpack Compose应用升级后崩溃,全新安装正常运行
升级后Drawable加载崩溃的问题排查与解决
核心原因
升级场景下,Android资源缓存机制或增量更新的资源ID映射出现异常,导致painterResource无法正确识别Drawable类型。即便你确认iconResId初始化无误,旧版本遗留的资源缓存仍可能让新资源ID指向错误的资源类型,触发IllegalArgumentException。
可行解决方案
清理应用资源缓存
在Application的onCreate方法中添加缓存清理逻辑,强制刷新资源缓存:override fun onCreate() { super.onCreate() // 清除AppCompat的Drawable缓存 AppCompatDelegate.getDrawableCache()?.clear() // 刷新布局缓存 resources.flushLayoutCache() }显式处理Drawable转换
绕过painterResource的自动类型检测,手动获取Drawable并转换为Painter:val context = LocalContext.current val drawable = ContextCompat.getDrawable(context, myDataClass.iconResId) val painter = drawable?.let { rememberDrawablePainter(it) } painter?.let { Image( painter = it, contentDescription = "" ) }排查打包配置问题
- 检查
build.gradle中shrinkResources是否开启,若开启需确保旧资源未被误标记为无用资源 - 临时关闭
android.enableResourceOptimizations=true(在gradle.properties中),排查是否是资源优化导致的ID映射异常
- 检查
动态获取资源ID
避免直接使用硬编码的资源ID,改为动态获取当前版本的资源ID:// 替换为你的资源名称 val iconResId = context.resources.getIdentifier( "your_icon_name", "drawable", context.packageName )
内容的提问来源于stack exchange,提问作者Harsh Nandwani
相关产品推荐
相关产品推荐

