Подтвердить что ты не робот

Приложение Android запоминает свои данные после удаления и переустановки

При разработке приложения для Android, предназначенного для всех версий выше 4.1, я заметил, что удаление моего приложения и его повторная установка не очищает его данные.

Приложение предназначено для хранения деталей, которые оно запрашивает на первом экране. После удаления и повторной установки в ОС версии 4.4.4 приложение предлагает пользователю заполнить данные, что является нормальным. Однако в версии 6.0 та же последовательность установки/удаления возвращает исходные данные.

Я попытался убедиться, посетив /data/data/my package folder чтобы убедиться, что база данных исчезла после удаления и действительно эта папка удаляется во время удаления.

Я попытался удалить приложение, посетив страницу настроек через Titanium Backup и результаты такие же. На устройстве рутирован Nexus 5 под управлением v6.0.

В чем может быть причина этого странного поведения?

4b9b3361

Ответ 1

Это потому, что Android 6 имеет автоматическое резервное копирование. Вам нужно настроить android:allowBackup и android:fullBackupContent в вашем <application> манифеста <application> если вы не хотите, чтобы ваши данные были скопированы или если вы хотите включить или исключить некоторые ресурсы. Это не баг.

Подробнее об AutoBackup на Android здесь.

Ответ 2

greywolf82 ответ правильный, но я хочу добавить к этому некоторую информацию.

При разработке моего приложения для Android (с использованием Xamarin) я заметил, что всякий раз, когда я перезапускаю приложение из Visual Studio, мои данные возвращаются к данным, полученным несколько месяцев назад. Не имело значения, если я просто остановился и перезапустил его из VS, или я полностью удалил приложение и переустановил его.

Стоит также отметить, что мы никогда не указывали приложению явно сохранять резервную копию.

Резервное копирование также, по-видимому, перезаписывает новые данные при запуске из Visual Studio, и у нас есть отчеты о пользователях, использующих сборку выпуска нашего приложения, а также получающих новые данные, перезаписываемые резервными копиями.

Поскольку я не знаю точно, когда происходят резервные копии и восстановления, эта функция, кажется, вызывает только проблемы.

Мы изменили наш AndroidManifest, как показано в следующем XML:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.XXXXXXX" android:versionName="8.0.0" android:installLocation="auto" android:versionCode="439">
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="24" />
    <application 
               android:label="@string/appName" 
               android:icon="@drawable/icon_small" 
               android:installLocation="internalOnly" 
               android:largeHeap="true"
               android:allowBackup="false"
               android:fullBackupOnly="false"
               />
...
</manifest>

Как только мы явно установим значение в false, все будет работать. Я бы ожидал, что это будет опция подписки, но... кажется, что она может быть включена по умолчанию для приложений, которые не указывают значение в любом случае.

Ответ 3

Вам следует проверить настройки устройства "Резервное копирование и сброс", а также отключить автоматическое восстановление (при переустановке приложения будут восстановлены резервные копии настроек и данных.)

Отключение автоматического резервного копирования отличается от автоматического восстановления. Если вы считаете, что для вашего приложения будет полезно включить автоматическое резервное копирование, сделайте это. Но если вы думаете, что это заставит конечных пользователей, которые не знают, что функция автоматического восстановления на их устройстве включена, не стесняйтесь отключить ее.

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

Смотрите изображение в качестве ссылки для устройства Samsung на Android 6.0. Другие устройства и версии могут иметь другой экран. Смотрите изображение ниже.

Настройка автоматического восстановления в разделе "Резервное копирование и сброс"

Ответ 4

Недавно мне нужно было воспользоваться этими функциями, я смог раскрыть документацию, и после всестороннего тестирования я смог сделать следующее:

Android: allowbackup - создает резервную копию данных локального приложения на устройстве, на котором оно находится.

Android: fullBackupContent - используется в сочетании с API восстановления резервных копий Google, и МОЖЕТ управляться через файл xml для указания того, что именно должно быть сохранено, а также класс BackupManager, который вы можете реализовать для дальнейшего контроля над процессом.

Однако в документации говорится, и я подтвердил тестированием, что восстановление будет происходить только тогда, когда восстанавливается устройство и запускается процесс восстановления данных приложения. ИЛИ он также будет восстанавливаться при загрузке приложения через adb, что мы и делаем, когда запускаем приложение для тестирования или отладки на наших устройствах через Android Studio. Обратите внимание, что если вы установили android: allowbackup, но не настроили android: fullBackupContent с помощью API-кода Google, тогда данные приложений будут храниться только локально, тогда как если вы настроили его правильно, то, если ваше приложение было скопировано, и вы получили новое устройство, приложения данные были сохранены в облаке, чтобы их можно было восстановить на новом устройстве.

Ответ 5

Просто измените android: allowBackup = "true" на android: allowBackup = "false" в файле manifiest.xml. Это будет работать.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    <application
        android:allowBackup="false"
        android:icon="@mipmap/app_icon"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
</manifest>

Ответ 6

Я думаю, что вы не удаляете приложение вручную, у меня тоже была эта проблема, потому что я просто запускал приложение на устройстве, таким образом, приложение кажется таким же, отражаются только последние внесенные изменения, но когда я сам удаляю приложение с устройства и снова устанавливаю apk, записи удаляются, и мое приложение похоже на новую установку.

Не пытайтесь использовать тест на режиме устройства, соберите apk, удалите текущее приложение на своем устройстве, затем снова установите apk, запустите ваше приложение и увидите разницу. Надеюсь, поможет.

Ответ 7

Добавление android: allowBackup = "false" под тегом приложения в файле манифеста решило мою проблему.

Ответ 8

Просто добавив к этому, мы обнаружили, что в Android 9 (на устройстве HMD Nokia) активы удерживались даже после удаления приложения через интерфейс и через adb.

Ответ добавления:

android:allowBackup="false" android:fullBackupOnly="false"

Очевидно, что это не новый ответ - это наблюдение для людей, которые были в том же положении, что и мы.