Android-每次应用更新后,Drawables就会混乱

时间:2018-07-15 07:31:24

标签: android proguard drawable

我在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

如何解决此问题?

如果可能的话,我会避免不缩小图片,因为我有很多图片,这会增加应用程序的下载大小。

2 个答案:

答案 0 :(得分:1)

您根本无法依靠资源号在各个版本中保持相同。您将需要使用另一个标识符使之持久化,然后映射到您应用程序中的资源编号。

例如,您可以使用包含资源编号的数组,并保留某个可绘制对象的索引。

答案 1 :(得分:1)

来自Google文档:“在编译应用程序时,aapt会生成R类,其中包含res /目录中所有资源的资源ID。对于每种类型的资源,都有一个R子类(例如,R .drawable(对于所有可绘制资源),并且对于该类型的每个资源,都有一个静态整数(例如R.drawable.icon)。该整数是可用于检索资源的资源ID。”因此,当您构建APK时,ResourceID可能会发生变化,而没有任何预料... 您可以使用其文件名并在运行时使用“ getResources()。getIdentifier(...)”获取ID。