Jetpack Compose 应用程序在从以前的版本更新时崩溃

Jetpack Compose App crashed when updated from previous version

提问人:Harsh Nandwani 提问时间:9/28/2023 更新时间:9/28/2023 访问量:106

问:

我的应用在从以前的版本更新时崩溃,并出现异常:

java.lang.IllegalArgumentException:仅支持 VectorDrawables 和栅格化资源类型 ex. PNG、JPG

当新版本是全新安装时,它运行良好。仅当从旧版本更新时才会出现此问题。它在我的第二个活动中崩溃,我显示drawables文件夹中的图像,启动器活动工作正常。

这是我显示可绘制图像的方式:

Image( painter = painterResource(id = myDataClass.iconResId), contentDescription = "" )

myDataClass是一个数据对象,在每次应用程序启动时,我都会使用 xml 可绘制资源 ID 初始化属性(因为它可以在每次应用程序启动时更改)。iconResId

我已正确完成升级: 新 apk 的 versionCode 大于旧 apk versionName 也是不同的字符串。

可能值得注意的是,新版本中添加了几个额外的可绘制对象,但没有删除旧的可绘制对象。

尝试调试并检查资源 ID 是否在 propery 中正确初始化。它正在正确初始化。iconResId

Android 异常 android-jetpack-compose android-vectordrawable

评论

1赞 Kamil Jeglikowski 9/28/2023
stackoverflow.com/questions/72582702/......检查此问题
0赞 Harsh Nandwani 9/28/2023
@KamilJeglikowski是的,我在发布问题之前检查了这一点,重新安装可以解决问题,但我需要将我的应用程序上传到 Play 商店,用户将从以前的版本升级,当此升级发生时它会崩溃,否则如果新安装它会运行没有任何问题。

答:

0赞 hi.cosmonaut 9/28/2023 #1

签入您的文件,因为如果它是带有 xml 标签(如 等)的常规图像,则无法在 Jetpack Compose 中使用它。您应该使用 .png/.jpg/.webp 和其他支持的扩展名或通过工具导入的 svg 图像drawable<shape/><layer-list/>Vector Asset

在变量下附加您的图像/文件,我可以告诉您更多信息iconResId

评论

0赞 Harsh Nandwani 9/28/2023
我没有使用,或者应用程序在全新安装时运行良好。仅当从以前的版本升级时才会崩溃。这是我的 iconResId这就是我在应用程序启动时更新资源 ID 的方式。<shape><layer-list>
0赞 hi.cosmonaut 9/28/2023
尝试将第 37-38 行中的 -1 更改为默认图像或 0。类似 或companyIconResIds.getResourceId(index, 0)companyIconResIds.getResourceId(index, R.drawable.default_company_icon)
0赞 Harsh Nandwani 9/28/2023
我试过了,它不起作用。我想我找到了这个的根本原因,即使我提供默认值为 0 或默认可绘制对象,我的数据库也没有更新它。它保持 -1。我正在将更新的实体模型传递给 DAO 的方法,但仍然不知道为什么它没有更新@Update
0赞 Harsh Nandwani 9/28/2023
知道了!应用程序崩溃,因为资源 id 仍然是以前的版本(没有得到更新,因为它默认将 id 为 0) 感谢您的帮助