Ключ SharedPreferences установлен перед созданием - PullRequest
0 голосов
/ 01 октября 2019

Я обнаружил проблему с общими настройками, которая возникает только для некоторых устройств и только с Android 9 (Pie) o выше.

Для шифрования базы данных я создаю ключ и сохраняю его в моих sharedPreferences.

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
String content = sharedPreferences.getString(-nameOfTheKey-, "");

if (content == null || content.isEmpty()){
    // Create and store the new key
    content = restoreApplicationKey(context);
}

Как видите, сначала я проверяю доступность, затем создаю, если она не существует или пуста. Этот ключ не создан ни в каком другом месте. Это единственное замечание.

Когда я пытаюсь сначала установить приложение на моем устройстве, условие возвращает false, поскольку значение ключа уже присутствует в моих SharedPreferences. Это невозможно!

В Интернете я обнаружил, что решение состоит в том, чтобы установить allowBackup = "false" в Manifest и переустановить приложение, но я не понимаю этого поведения. Как возможно, что значение kay предварительно установлено?

Кроме того, перед тем, как установить для allowBackup значение false, я заметил, что , если форсировать инициализацию и удалить приложение, послепереустановите ключ все еще присутствует, но значение изменилось. Каждый раз с одной и той же строкой, но отличной от сохраненной . Все остальные ключи в порядке, кроме этого.

Как я уже сказал, приведенный выше код является единственной точкой входа и вызывается только при запуске приложения. Кроме того, restoreApplicationKey (context) вызывается только в этот момент.

...