我在Play商店中发布了一个应用,对于我和我的用户来说,我都面临着一个烦人的问题。
我将对象列表存储为JSON字符串,如下所示:
val obj = JSONObject()
try {
...
obj.put("image", image)
} catch (e: JSONException) {
Log.d("JSONException: ", e.message)
}
其中image: Int
存储R.drawable.image
的值
问题在于,每次我发布我的应用程序更新时,该图像都会被/res/
文件夹中的另一个可绘制对象(并非始终相同)替换。
我怀疑这与proguard的代码缩减有关,因为我同时拥有:
minifyEnabled true
shrinkResources true
如何解决此问题?
如果可能的话,我会避免不缩小图片,因为我有很多图片,这会增加应用程序的下载大小。
答案 0 :(得分:1)
您根本无法依靠资源号在各个版本中保持相同。您将需要使用另一个标识符使之持久化,然后映射到您应用程序中的资源编号。
例如,您可以使用包含资源编号的数组,并保留某个可绘制对象的索引。
答案 1 :(得分:1)
来自Google文档:“在编译应用程序时,aapt会生成R类,其中包含res /目录中所有资源的资源ID。对于每种类型的资源,都有一个R子类(例如,R .drawable(对于所有可绘制资源),并且对于该类型的每个资源,都有一个静态整数(例如R.drawable.icon)。该整数是可用于检索资源的资源ID。”因此,当您构建APK时,ResourceID可能会发生变化,而没有任何预料... 您可以使用其文件名并在运行时使用“ getResources()。getIdentifier(...)”获取ID。