应用程序更新后无法从共享首选项加载数据

j13ufse2  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(410)

我在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字符串中获取原始对象?

bttbmeg0

bttbmeg01#

将此添加到proguard配置:

-keepclassmembernames class your.path.to.BrightnessSetting

如果使用gson将类与字符串进行转换,则需要防止proguard混淆类的成员(gson需要这些成员才能工作)。
理想情况下,您应该以另一种方式存储信息,以便不必依赖此方法。更新之间对brightnesssetting的任何更改都可能破坏向后兼容性。

相关问题