Une application Android se souvient de ses données après la désinstallation et la réinstallation

194

Lors du développement d'une application Android ciblant toutes les versions supérieures à 4.1, j'ai observé que la désinstallation de mon application et sa réinstallation n'efface pas ses données.

L'application est conçue pour stocker les détails qu'elle demande dans son premier écran. Après avoir désinstallé et réinstallé la version 4.4.4 du système d'exploitation, l'application invite l'utilisateur à remplir les données, ce qui est normal. Cependant, dans la version 6.0, la même séquence d'installation / désinstallation ramène les données entrées à l'origine.

J'ai essayé de m'assurer en visitant /data/data/my package folderpour voir que la base de données avait disparu après la désinstallation et que ce dossier était effectivement supprimé lors de la désinstallation.

J'ai essayé de supprimer l'application en visitant la page des paramètres, via Titanium Backup et les résultats sont les mêmes. L'appareil est enraciné Nexus 5 exécutant la v6.0.

Quelle pourrait être la raison de ce comportement étrange?

Narayanan
la source

Réponses:

330

C'est parce qu'Android 6 a une sauvegarde automatique. Vous devez régler android:allowBackupet android:fullBackupContentdans votre <application>balise manifeste si vous ne souhaitez pas que vos données soient sauvegardées ou si vous souhaitez inclure ou exclure certaines ressources. Ce n'est pas un bug.

En savoir plus sur AutoBackup sur Android ici .

greywolf82
la source
28
C'est la bonne réponse et ça marche pour moi (j'ai eu le même problème) Pour éviter ce comportement, il faut mettre android: allowBackup = "false" et android: fullBackupContent = "false" dans manifest.xml
frusso
33
Au cas où certains d'entre vous le demanderaient, android: allowBackup et android: fullBackupContent sont des propriétés à ajouter dans <application />
Jack
2
De la documentation: android: fullBackupContent pointe vers un fichier XML qui contient des options de sauvegarde. Par défaut, la plupart des fichiers sont sauvegardés. Bien que le paramétrage de ce paramètre sur "false" ne déclenche aucune erreur, je suppose qu'il est incorrect de le définir.
bajicdusko
3
Je ne sais pas pourquoi ont-ils conservé le comportement par défaut pour effectuer une sauvegarde, car le comportement n'est pas synchronisé avec les versions précédentes et devient donc ennuyeux. Ceux qui le souhaitent peuvent l'activer.
Atul
7
Quelqu'un sait comment supprimer les sauvegardes?
1800 INFORMATION
31

La réponse de greywolf82 est correcte mais je veux ajouter quelques informations à cela.

Lors du développement de mon application Android (à l'aide de Xamarin), j'ai remarqué que chaque fois que je relançais l'application à partir de Visual Studio, mes données revenaient aux données d'il y a quelques mois. Peu importe si je l'ai simplement arrêté et relancé à partir de VS, ou si j'ai complètement désinstallé l'application et réinstallée.

Il convient également de noter que nous n'avons jamais explicitement dit à l'application de stocker une sauvegarde.

La sauvegarde semblait également écraser les données plus récentes lors du lancement à partir de Visual Studio, et nous avons des rapports d'utilisateurs utilisant la version de version de notre application et obtenant également des données plus récentes écrasées par les sauvegardes.

Comme je ne sais pas exactement quand les sauvegardes et les restaurations se produisent, cette fonctionnalité semble ne causer que des problèmes.

Nous avons modifié notre AndroidManifest comme indiqué dans le xml suivant:

<?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>

Une fois que nous avons explicitement défini la valeur sur false, tout semble fonctionner. Je m'attendrais à ce que ce soit une fonctionnalité optionnelle, mais ... il semble que cela puisse être activé par défaut pour les applications qui ne spécifient pas la valeur de toute façon.

Victor Chelaru
la source
Merci. J'ai eu le même problème.
Hadi Fooladi Talari
15

Vous devez vérifier les paramètres de sauvegarde et de réinitialisation de votre appareil et désactiver la restauration automatique (lors de la réinstallation d'une application, les paramètres et les données sauvegardés seront restaurés.)

La désactivation de la sauvegarde automatique est différente de la restauration automatique. Si vous pensez qu'il sera utile d'activer la sauvegarde automatique pour votre application, faites-le. Mais si vous pensez que cela rendra les utilisateurs finaux qui ne savent pas que la fonction de restauration automatique de leur appareil est activée, n'hésitez pas à la désactiver.

Dans mon cas, j'ai désactivé la fonction allowBackup, mais comme j'avais déjà une sauvegarde de la version précédente sur le Cloud, la restauration continuait.

Voir l'image comme référence pour un appareil Samsung sous Android 6.0. D'autres appareils et versions peuvent avoir un écran différent. Voir l'image ci-dessous.

Paramètre de restauration automatique sous Sauvegarde et réinitialisation

Matcieou7e
la source
J'ai le même problème, mon application avait sauvegardé les données de quelques utilisateurs lorsqu'elle était allumée. Existe-t-il une possibilité d'effacer / supprimer les données synchronisées?
Aditya Chauhan
5

J'ai récemment eu besoin de profiter de ces fonctionnalités, j'ai pu découvrir de la documentation et après des tests approfondis, c'est ce que j'ai pu déduire:

Android: allowbackup - sauvegardera les données de l'application locale sur l'appareil sur lequel il se trouve.

Android: fullBackupContent - est utilisé en conjonction avec l'API de restauration de sauvegarde de Google et PEUT être contrôlé via un fichier xml pour spécifier exactement ce qu'il faut sauvegarder, ainsi qu'une classe BackupManager que vous pouvez implémenter pour un contrôle supplémentaire sur le processus.

Cependant, la documentation indique, et j'ai confirmé avec des tests, qu'une restauration ne se produira que lorsque l'appareil est restauré et que le processus de restauration des données de l'application est déclenché. OU il sera également restauré lorsque l'application est téléchargée via adb, ce que nous faisons lorsque nous exécutons l'application pour tester ou déboguer sur nos appareils via Android Studio. Notez que si vous définissez android: allowbackup mais ne configurez pas android: fullBackupContent avec un code api Google, les données des applications ne sont stockées que localement, tandis que si vous les avez correctement configurées, si votre application a été sauvegardée et que vous obtenez un nouvel appareil, les applications les données ont été stockées sur le cloud afin de pouvoir être restaurées sur un nouvel appareil.

Xijukx
la source
3

L'ajout d'android: allowBackup = "false" sous la balise d'application dans le fichier Manifest a résolu mon problème.

Voici la documentation Android pour la sauvegarde des données utilisateur avec la sauvegarde automatique

Vinay John
la source
2

Changez simplement android: allowBackup = "true" en android: allowBackup = "false" dans manifiest.xml. Cela fonctionnera.

<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>
Nag Kosanam
la source
2

En ajoutant simplement à cela, nous avons constaté que dans Android 9 (sur un appareil HMD Nokia), les actifs étaient conservés, même après la suppression de l'application via l'interface et via adb.

La réponse d'ajouter:

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

Évidemment, ce n'est pas une nouvelle réponse - mais une observation pour des gens qui étaient dans la même situation que nous.

JRK
la source
2

Si vous ciblez Android 10, vous devez mettre android:hasFragileUserData="true"une balise d'application deAndroidManifest.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 est un nouveau paramètre de manifeste (je suppose). "Si vrai, l'utilisateur est invité à conserver les données de l'application lors de la désinstallation". Cela semble propice aux abus, mais je peux voir où cela pourrait être utile pour certaines applications.

Voir https://commonsware.com/blog/2019/06/06/random-musings-q-beta-4.html

Manohar Reddy
la source