Android "запоминает" общие настройки после полной деинсталляции приложения
В моем приложении для Android я использую набор случайно сгенерированных имен файлов для хранения некоторых данных. Чтобы гарантировать, что один и тот же набор имен файлов генерируется при перезапуске приложения - и все же разные для каждой установки приложения - я запускаю процесс, выбирая имена в качестве подстрок из длинной строки случайных буквенно-цифровых символов, которые я генерирую, когда приложение установлено. Эта последняя строка хранится в общих преференциях.
Когда я тестировал приложение, я столкнулся с довольно специфической проблемой. Время от времени я делаю серьезные изменения, чтобы полностью удалить приложение - и даже принудительно закрыть его + очистить все его данные. В этот момент я ожидаю, что устройство не будет иметь "предварительных знаний" о приложении, если оно будет переустановлено. И все же я обнаружил, что строка "Общие настройки" каким-то образом "запоминается". Это вызывает хаос, если в промежутке я изменил способ подстроки имени файла выбрать из сохраненной строки общих настроек.
Как я могу убедиться, что приложение имеет "нулевую память" ранее установленной версии, которая впоследствии была удалена?
Одно из решений, которое я использовал в прошлом, - инструктировать Android не делать никаких резервных копий через файл манифеста, android:allowBackup = "false"
, Тем не менее, я отказался от этой идеи, поскольку - если я не ошибаюсь - это фактически означает, что я запрещаю пользователю переносить свое приложение на новое устройство, когда они решают сменить телефоны.
3 ответа
При (пере) установке ваше приложение может восстанавливать файлы из Google Auto-Backup (через Google Drive). Чтобы отключить эту функцию, вы можете явно установить ее в false в манифесте:
<manifest ... >
...
<application android:allowBackup="false" ... >
...
</application>
</manifest>
Если вы хотите более детальный контроль над тем, что копируется / восстанавливается, а что нет, вы можете включать или исключать определенные файлы из резервных копий.
См. Документацию по автоматическому резервному копированию: https://developer.android.com/guide/topics/data/autobackup.
Если вы не хотите отключать автоматическое резервное копирование, но хотите переустановить его с "чистого листа" (для целей тестирования), вы можете выполнить одно из следующих действий:
- Очистите данные приложения после переустановки. Это уничтожит файлы, которые были восстановлены автоматически при установке
- Очистите данные приложения перед удалением, а затем принудительно создайте новую резервную копию (чтобы старая была сброшена) с помощью этой команды:
adb shell bmgr backupnow <PACKAGE>
Посмотрите, как проверить документацию по резервному копированию: https://developer.android.com/guide/topics/data/testingbackup
Расширить это, например, mobile/src/debug/AndroidManifest.xml
<application
tools:replace="android:allowBackup"
android:allowBackup="false">
...
</application>
подобно этому можно отключить автоматическое резервное копирование для отладочных сборок, но оставьте его включенным для сборок выпуска.
просто потому, что отключение автоматического резервного копирования для сборок релиза может не быть ожидаемым результатом.
Основываясь на предложении @ Hungryghost, я в итоге реализовал решение
Проблема: общие настройки могут быть запомнены Android после переустановки приложения и общих инструкций в манифесте в соответствии с android:allowBackup = "false"
не являются решением.
Так почему бы не превратить проблему в решение самостоятельно? Вот что я делаю
- Проверьте общие настройки для конкретного ключа сборки.
Если этот ключ не найден, я делаю две вещи
- Очистить все общие настройки,
context.deleteSharedPrefernces(filename)
- Теперь создайте этот ключ для конкретной сборки
- Когда я делаю изменения приложения, которые требуют забыть старые настройки, я просто изменяю ключ сборки.
- Очистить все общие настройки,