Додаток Android запам'ятовує свої дані після видалення та перевстановлення


194

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

Додаток призначений для зберігання деталей, які він запитує, на першому екрані. Після видалення та інсталяції в ОС версії 4.4.4 додаток пропонує користувачеві заповнити дані, що є нормальним явищем. Однак у версії 6.0 та сама послідовність встановлення / видалення повертає дані, які були введені спочатку.

Я намагався переконатися, завітавши, /data/data/my package folderщоб побачити, як база даних знищена після видалення, і справді ця папка видаляється під час видалення.

Я спробував видалити додаток, відвідавши сторінку налаштувань, через Titanium Backup та результати однакові. Пристрій укорінений Nexus 5 під керуванням v6.0.

Що може бути причиною цієї дивної поведінки?

Відповіді:


329

Це тому, що в Android 6 є автоматичне резервне копіювання. Вам потрібно налаштувати android:allowBackupта android:fullBackupContentв <application>тезі маніфесту, якщо ви не хочете, щоб ваші дані були резервні, або якщо ви хочете включити або виключити деякі ресурси. Це не помилка.

Більше про AutoBackup на Android тут .


28
Це правильна відповідь, і це працює для мене (у мене була така ж проблема) Щоб уникнути такого поведінки, потрібно поставити android: enableBackup = "false" та android: fullBackupContent = "false" у manifest.xml
frusso

33
У випадку, якщо хтось із вас замислюється, андроїд: enableBackup та android: fullBackupContent - це властивості, які потрібно додати до <application />
Jack

2
З документації: android: fullBackupContent вказує на файл XML, який містить параметри резервного копіювання. За замовчуванням більшість файлів є резервними копіями. Хоча налаштування цього значення "false" не викликає помилок, я думаю, це неправильно встановити.
bajicdusko

3
Не впевнені, чому вони зберігали поведінку за замовчуванням, щоб зробити резервну копію, оскільки поведінка не синхронізується з попередніми версіями, тому стає прикрою. Ті, хто хоче цього, можуть увімкнути.
Атул

7
Хтось знає, як видалити резервні копії?
1800 р. ІНФОРМАЦІЯ

31

Відповідь 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, все, здається, працює. Я б очікував, що це буде функцією відключення, але ... здається, вона може бути включена за замовчуванням для програм, які не визначають значення в будь-якому випадку.


Дякую. У мене було те саме питання.
Хаді Фоладі Таларі

15

Ви повинні перевірити настройки резервного копіювання та скидання пристрою та вимкнути автоматичне відновлення (при перевстановленні програми буде створено резервне копіювання налаштувань і даних.)

Відключення автоматичного резервного копіювання відрізняється від автоматичного відновлення. Якщо ви думаєте, що буде корисно ввімкнути автоматичне резервне копіювання для вашої програми. Але якщо ви думаєте, що це зробить кінцевих користувачів, які не знають, що функція автоматичного відновлення їх пристрою увімкнена, сміливо вимикайте її.

У моєму випадку я вимкнув функцію enableBackup, але оскільки у мене вже було резервне копіювання попередньої версії в Хмарі, воно все одно продовжувало відновлення.

Див. Зображення як орієнтир для пристрою Samsung на Android 6.0. Інші пристрої та версії можуть мати інший екран. Дивіться зображення нижче.

Налаштування автоматичного відновлення в режимі резервного копіювання та скидання


У мене така ж проблема, коли моє додаток створило резервну копію даних для кількох користувачів, коли вона була ввімкнена. Чи є можливість очистити / відкинути синхронізовані дані?
Адітя Чаухан

5

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

Android: enablebackup - створить резервну копію даних локальних додатків на пристрої, на якому він знаходиться.

Android: fullBackupContent - використовується в поєднанні з api відновленням резервного копіювання Google, і МОЖЕТ управляти через XML-файл, щоб вказати, що саме робити резервну копію, а також клас BackupManager, який ви можете застосувати для подальшого контролю над процесом.

Однак у документації зазначено, і я підтвердив тестуванням, що відновлення відбудеться лише тоді, коли пристрій відновиться і процес запуску даних відновлення буде запущено. АБО він також відновиться, коли додаток завантажено через adb, що ми робимо, коли запускаємо додаток для тестування або налагодження на наших пристроях через Android Studio. Зауважте, що якщо встановити android: enablebackup, але не налаштувати android: fullBackupContent з кодом api Google, то дані програм зберігаються лише локально, тоді як якщо ви їх правильно налаштували, то якщо резервна копія вашої програми та ви отримаєте новий пристрій, програми дані зберігалися у хмарі, щоб їх можна було відновити на новому пристрої.


3

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

Тут йде документація на Android для резервного копіювання даних користувачів за допомогою автоматичного резервного копіювання


2

Просто змініть android: enableBackup = "true" на android: enableBackup = "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>

2

Тільки додавши до цього, ми виявили, що в Android 9 (на пристрої Nokia HMD) активи зберігалися навіть після видалення програми через інтерфейс та через adb.

Відповідь додавання:

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

Очевидно, що це не нова відповідь - це спостереження за людьми, які опинилися в такому ж становищі, як ми.


2

Якщо ви орієнтуєтеся на Android 10, то вам доведеться помістити android:hasFragileUserData="true"тег додаткаAndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <application
    android:name=".MyApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:allowBackup="true"
    android:hasFragileUserData="true">

    .....

     </application>

 </manifest>

android: hasFragileUserData - це нова настройка маніфесту (я думаю, що далі). "Якщо вірно, користувачеві пропонується зберігати дані програми про видалення". Це здається зрілим для зловживань, але я бачу, де це може бути корисно для деяких додатків.

Дивіться https://commonsware.com/blog/2019/06/06/random-musings-q-beta-4.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.