SharedPreferences теряется после обновления приложения - PullRequest
0 голосов
/ 02 июля 2018

Я исследую эту проблему целый день. Вот ключевые моменты:

  • SharedPreferences должен быть постоянным, когда пользователь обновляет приложение
  • в моем случае после обновления приложения они теряются
  • проблема воспроизводится каждый раз (я устанавливаю старый APK из Play Store, а затем adb install -r new.apk с новым (обновленным, подписанным, versionCode увеличен) APK)

8 часов спустя

Для теста я изменил имя файла SharedPrefs в new.apk ( SP2.xml ) и после обновления старый файл SharedPrefs из old.apk ( SP.xml ) был удален! Вот вывод оболочки adb:

  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);
    }
    ...
}

Так что в основном я теряю SharedPreferences и понятия не имею, почему. Пожалуйста, помогите, любая подсказка приветствуется!

1 Ответ

0 голосов
/ 04 июля 2018

Если вы изменили свойство в разделе приложения файла манифеста, эта ошибка будет возникать, и в 90% случаев общие данные pref будут сброшены. Это то, что я обнаружил в своем тесте, установив подписанный apk поверх моего приложения Play Store. Не уверен, что произойдет, если приложение было установлено из магазина игр в качестве обновления, но я почти уверен, что в этом случае данные будут потеряны.

РЕДАКТИРОВАТЬ- Я переиздал приложение и протестировал несколько раз. Это на самом деле является проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...