94 votes

Qu'arrivera-t-il aux SharedPreferences lors de la mise à jour d'une application Android ?

J'ai stocké les paramètres de l'utilisateur dans les SharedPreferences de mon application. Que se passera-t-il avec les SharedPreferences lorsque je mettrai à jour l'application via Google Play Store vers une nouvelle version de l'application ?

Les préférences partagées seront-elles toujours présentes après la mise à jour ou seront-elles supprimées ?

Jusqu'à présent, je n'ai pas trouvé de réponse sur le web ou sur Stackoverflow.

Pouvez-vous m'indiquer des liens qui décrivent ce processus ?

Edita: Entre-temps, j'ai trouvé une autre réponse : Comportement de SharedPreferences lors d'une mise à jour/désinstallation

Edita 2: Le temps a bien passé lorsque j'ai posé cette question pour la première fois. J'ai appris récemment que depuis Android 6.0 (API 23), il est également possible d'utiliser la fonctionnalité de sauvegarde automatique pour magasin vos préférences partagées telles que décrites par Google ici .

Il suffit d'ajouter le <application android:allowBackup="true" ... > dans votre AndroidManifest.xml fichier.

77voto

hasanghaforian Points 5794

Cristian aquí dit : les données de votre application seront conservées lorsque l'utilisateur installera les mises à jour.

Mais ce doit être avec le même package name à détecter comme une mise à jour de la précédente App.

EboMike en Avertir les utilisateurs d'Android que la mise à jour d'une application peut entraîner la perte des données de l'ancienne version de l'application ? dit :

Franchement, la perte de données due à une mise à niveau est inacceptable.

Modifier :

Normalement les préférences partagées (ainsi que d'autres données de l'utilisateur) seront conservées pendant le processus de mise à jour, mais parfois, en raison d'un certain " inconnu "Le problème, c'est que les données peuvent se perdre, et je suppose que c'est hors de votre contrôle. Donc, vous pouvez simplement croire que les SharedPreferences seront conservées( voir ici ).

Donc, si vous voulez éviter d'effacer les données de l'utilisateur au cours de la mise à niveau, vous devez sauvegarder les données principales dans un stockage externe (il peut s'agir d'un support de stockage amovible, comme une carte SD ou un stockage interne, non amovible) et non privé pour votre application, ou au moins permettre à l'utilisateur de sauvegarder ses données avant la mise à niveau.

Si vous voulez savoir Quelles sont les choses qui doivent/peuvent se produire lors de la mise à niveau d'une application ? Je n'ai pas trouvé de bonne description pour cela. C'est compliqué et relatif avec Android Security , Application signing , copy protection Je veux dire que si vous changez l'état de votre application dans l'un des champs ci-dessus, le résultat sera différent.
Par exemple, si vous CHANGED COPY PROTECTION FROM ON to OFF OR OFF to ON votre application sera mise à jour, mais toutes vos préférences partagées seront perdues, l'accès aux fichiers sera impossible et... .
Vous devez cependant faire attention aux conditions dans lesquelles votre nouvelle application sera utilisée. being considered comme une mise à jour de l'application précédente (voir Les choses qui ne peuvent pas changer ).

Vous devez également faire attention à votre code, il peut être causé par la suppression de données de vos bases de données (voir mettre à jour l'application avec SQLite préchargé ).

Mais finalement, si on fait attention, on peut dire :

Le processus de mise à jour ne fait que remplacer le fichier apk (et donc ce qu'il contient pour... par exemple drawables,...) et ne modifie pas les bases de données, les préférences partagées et tout autre fichier généré au moment de l'exécution (probablement dans ce cas, la nouvelle application est installée avec l'UID qui est égal à l'UID de la l'application précédente).

Vous pouvez consulter ces pages pour plus de détails :

A l'aide ! ? La mise à jour de notre application sur le marché supprime les SharedPreferences enregistrées.
La protection contre la copie du marché interrompt totalement l'accès aux fichiers après une mise à jour
Quelqu'un peut-il expliquer le processus de mise à jour de l'application ?

9voto

abhishek Points 433

Après avoir débogué pendant plus de 4 heures, j'ai découvert que je sauvegardais un modèle sous forme de chaîne en le sérialisant. Une classe sérialisable a un identifiant unique par le nom serialVersionUID L'identifiant est calculé à partir du nom de la classe, des interfaces et des noms de variables. J'ai découvert que j'ai changé la classe du modèle, ajouté une variable et ensuite mis à jour l'application. Puisque la classe est maintenant changée, un nouveau serialVersionUID a été défini et donc, lors de la mise à jour, il n'a pas été en mesure de désérialiser la chaîne et de créer le modèle et a donné java.io.InvalidClassException.

Définissez explicitement serialVersionUID pour éviter ce problème.

static final long serialVersionUID = 42L;

6voto

Lazy Ninja Points 6921

Je pense que lorsque j'ai mis à jour mon application la dernière fois via Google Play, les sharedPreferences n'ont pas été affectées.
Je les utilisais pour me connecter automatiquement, et après la mise à jour, c'était le cas.
C'était il y a un mois, ma mémoire peut être floue, il est donc préférable d'entendre l'opinion d'autres personnes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X