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

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


  • 8 小时后

    为了测试,我更改了 new.apk (SP2.xml) 中的 SharedPrefs 文件名,更新后,old.apk (SP.xml) 中的旧 SharedPrefs 文件被删除了! 这是 adb shell 输出:
  • adb install old.apk
  • adb shell "su -c 'ls /data/data/com.pkg.name/shared_prefs'" :
    CRC.xml
  • adb install -r new.apk
  • 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 并且我不知道为什么。请帮忙,欢迎任何提示!

    最佳答案

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

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

    关于android - 应用更新后 SharedPreferences 丢失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51135508/

    10-10 18:42
    查看更多