Je suis en mesure de sauvegarder les données de mon application à partir de la page d'accueil. root/data/data/you.package.name
Cependant, lorsque j'inverse le processus, c'est-à-dire que je recolle les données pour simuler une restauration, l'application se ferme de force, j'ai essayé avec un tas d'applications et j'ai remarqué la même réaction. Où est-ce que je me trompe ?
Réponse
Trop de publicités?Comme il n'y a pas d'autres réactions, je vais résumer les commentaires pour ceux qui rencontrent un problème similaire :
Firelord a correctement souligné il s'agit probablement d'un problème d'autorisations de fichiers. Le stockage interne utilise un système de fichiers supportant autorisations de fichiers granulaires 1 - qui ne sont pas pris en charge par le système de fichiers utilisé sur les cartes SD 2 . Donc la copie de tout le contenu de votre carte SD a perdu cette information, et la propriété a été perdue. 3 . En copiant ce fichier sur le stockage interne, il n'a toujours pas le bon propriétaire, et l'application ne peut pas y accéder correctement. Je ne m'attendais pas à ça 4 l'application se comportera bien sûr mal : une exception se produira sans être traitée, et l'application se plantera (fermeture forcée).
Pour ceux qui ont vérifié avec le mount
et maintenant argumenter vous avez tort, la carte SD n'utilise pas FAT mais FUSE ! - C'est vrai que c'est FUSE, mais dans ce cas, c'est agit comme un gros. Quel système de fichiers est FUSE, s'il vous plaît ? :) Ce n'est pas un physique système de fichiers à part entière, mais plutôt un virtuel un (FUSE signifie Système de fichiers dans l'espace utilisateur (qui s'oppose à l'"espace système" ou "espace noyau") fournissant un "pont" vers les interfaces réelles du noyau. Il y a plusieurs systèmes de fichiers qui utilisent FUSE : SSHFS, DAVFS et d'autres ont des implémentations FUSE. Encore une fois, c'était Firelord apporte un soutien à ma demande : _Le programme sdcard fait le travail de montage de FUSE et en config.jd Il est mentionné que le programme sdcard est utilisé par certains appareils pour exposer le stockage interne via FUSE._
Conclusion : Vous avez adopté une approche complètement erronée pour sauvegarde y rétablir ici. Si vous vouliez vraiment vous occuper de cela au niveau du système de fichiers, vous auriez dû utiliser un outil tel que tar (qui est disponible et généralement préinstallé sur les appareils Android) pour archiver le contenu tout en préservant les permissions (le "tarball" résultant peut alors être copié sur la carte SD, et le contenu peut toujours être extrait à son emplacement d'origine correctement). Par contre, comme notre sauvegarde du tag-wiki vous le dira, c'est exactement ce que adb ou des applications comme Helium - Synchronisation et sauvegarde des applications y Sauvegarde en titane sont pour.
1 : sur les anciennes versions d'Android, cela était souvent YAFFS sur les plus récents, c'est Extfs
2 : généralement GRAS
3 : ou plutôt "réinitialiser" aux valeurs par défaut utilisées pour le contenu stocké sur la carte SD
4 : un utilisateur normal ne peut pas faire ce genre de choses, car /data/data/<package_name>
n'est accessible à personne d'autre que son propriétaire et Root