应用更新后 SharedPreferences 丢失

Pri*_*alj 4 android sharedpreferences

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

  • 当用户更新应用程序时,SharedPreferences应该是持久的
  • 就我而言,更新应用程序后,它们丢失了
  • 该问题每次都可以重现(我从 Play 商店安装旧的 APK,然后adb install -r new.apk安装新的(更新、签名、版本代码递增)APK)

8小时后

为了测试我改变SharedPrefs的文件名new.apkSP2.xml),并在更新,从旧SharedPrefs文件old.apkSP.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 单例类 (init:) 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);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

use*_*133 7

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

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

  • 我在游戏商店发布并验证了这一点。我今天已经确认了。此外,考虑到几乎没有其他人指出这一点,认为强调这一点很重要。我花了很长时间才弄明白 (4认同)