我一整天都在研究这个问题。以下是关键点:
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/