Я исследую эту проблему целый день. Вот ключевые моменты:
- SharedPreferences должен быть постоянным, когда пользователь обновляет приложение
- в моем случае после обновления приложения они теряются
- проблема воспроизводится каждый раз (я устанавливаю старый APK из Play Store, а затем
adb install -r new.apk
с новым (обновленным, подписанным, versionCode увеличен) APK)
8 часов спустя
Для теста я изменил имя файла SharedPrefs в new.apk
( SP2.xml ) и после обновления старый файл SharedPrefs из old.apk
( SP.xml ) был удален! Вот вывод оболочки adb:
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 (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);
}
...
}
Так что в основном я теряю SharedPreferences и понятия не имею, почему. Пожалуйста, помогите, любая подсказка приветствуется!