应用更新后,SharedPreferences丢失

时间:2018-07-02 11:48:48

标签: android sharedpreferences

我整天都在研究这个问题。这里是关键点:

    用户执行应用程序更新时,
  • SharedPreferences 保持不变
  • 就我而言,更新应用程序后,它们丢失了
  • 每次都可以重现此问题(我先从Play商店安装了旧的APK,然后在adb install -r new.apk中安装了新的(更新,签名,versionCode递增)APK)

8小时后

为了进行测试,我更改了new.apk SP2.xml )中的SharedPrefs文件名,并在更新后从old.apk SP.xml 已删除!这是adb shell输出:

  1. adb install old.apk

  2. adb shell "su -c 'ls /data/data/com.pkg.name/shared_prefs'": CRC.xml

  3. adb install -r new.apk

  4. adb shell "su -c 'ls /data/data/com.pkg.name/shared_prefs'": CRC2.xml(缺少CRC.xml!)

我的SharedPreferences单例类(初始化:SharedPrefs.init(getApplicationContext());):

public final class SharedPrefs {
    private static SharedPrefs sp;

    private SharedPrefs() {
    }

    public static void init(Context context) {
        if (sp == null)
            sp = context.getSharedPreferences("CRC2", Context.MODE_PRIVATE);
    }

    public static void saveString(String name, String value) {
        sp.edit().putString(name, value).apply();
    }

    public static String getString(String key, String defaultValue) {
      sp.getString(key, defaultValue);
    }
    ...
}

所以基本上,我正在失去SharedPreferences,我也不知道为什么。请帮忙,欢迎提供任何提示!

1 个答案:

答案 0 :(得分:1)

如果您更改了清单文件的application部分中的属性,则会发生此错误,并且90%的时间将重置共享首选项数据。这是我在将Play商店应用顶部安装签名的APK的测试中发现的。不确定如果从Play商店安装该应用程序作为更新会发生什么,但是很确定在这种情况下数据也会丢失。

编辑-我重新发布了该应用程序并进行了多次测试。这实际上是问题所在。