我在play store上有一个应用程序,其中共享的首选项存储为json字符串。我正在尝试更新应用程序,但我注意到,在更新应用程序后,我无法正确加载任何存储的共享首选项数据,这意味着如果用户存储的首选项更新,则所有这些首选项都将丢失。
假设我有这样一节课:
public class BrightnessSetting {
public int systemAutoBrightness;
public boolean customAutoBrightness;
public int brightnessLevel;
public float adjustmentLevel;
public boolean playSound;
public String soundFile;
}
此类的对象以json格式保存到应用程序的共享首选项中,该格式只是将其转换为一个长字符串。当发布应用程序包被生成时,它通过用字母替换变量名来缩小这个字符串,因为它使用的是proguard。意味着最终结果如下: {"a": 0, "b": false, "c": 25, "d": 0.0, "e": false}
. 经过测试,我发现没有proguard一切正常,但有了proguard,我再也无法在应用程序更新后检索数据。共享的首选项键仍然正确,它们对应的json字符串仍然正确,但是当我尝试将json字符串作为 BrightnessSetting
然后我得到一个空的物体。
如何从json字符串中获取原始对象?
1条答案
按热度按时间bttbmeg01#
将此添加到proguard配置:
如果使用gson将类与字符串进行转换,则需要防止proguard混淆类的成员(gson需要这些成员才能工作)。
理想情况下,您应该以另一种方式存储信息,以便不必依赖此方法。更新之间对brightnesssetting的任何更改都可能破坏向后兼容性。