151 votes

Où les applications Android stockent-elles les données ?

Pouvez-vous énumérer tous les répertoires possibles où les applications Android peuvent stocker des données? Pouvez-vous également fournir une description du type de données stockées dans chaque répertoire?

138voto

Milner Points 533

Toutes les applications (root ou non) ont un répertoire de données par défaut, qui est /data/data/. Par défaut, les bases de données des applications, les paramètres et toutes les autres données vont ici. Ce répertoire est "privé" pour l'application - ce qui signifie qu'aucune autre application et même l'utilisateur ne peut accéder aux données qui s'y trouvent (sans les permissions root).

Si une application s'attend à ce que de grandes quantités de données soient stockées, ou pour d'autres raisons veut "être gentille avec le stockage interne", il y a un répertoire correspondant sur la carte SD (Android/data/).

En dehors de cela, toutes les applications peuvent stocker des données n'importe où sur la carte SD, car il n'y a pas de restrictions - et de nombreuses applications le font. Elles peuvent utiliser des noms de répertoires librement (et elles le font encore), ce qui rend souvent difficile de décider à quoi tout ce "bazar" sur la carte est destiné, et ce qui peut être supprimé.

Cependant, comme Tom l'a souligné, les applications root pourraient stocker leurs données presque n'importe où sur votre appareil, mais elles suivent généralement les mêmes règles que les autres applications.

Vous pouvez trouver une explication générale de la hiérarchie des répertoires Android dans ma réponse ici. Pour votre question spécifique, je pourrais ajouter quelques détails supplémentaires sur le /data/data/ (et la partie SD correspondante) :

  • databases/ : ici vont les bases de données de l'application
  • lib/ : bibliothèques et aides pour l'application
  • files/ : autres fichiers associés
  • shared_prefs/ : préférences et paramètres
  • cache/ : eh bien, des caches

Il peut y avoir plusieurs autres répertoires à cet endroit, ou moins - tout dépend de l'application. Dans son propre "répertoire principal" (et c'est fondamentalement ce que c'est, parlé à la manière Linux), elles peuvent placer des fichiers où elles veulent. Habituellement, ces fichiers et répertoires ne sont accessibles que par l'application elle-même (et par root, bien sûr) - contrairement à ceux stockés sur la carte SD, qui sont accessibles par toutes les applications.

0 votes

Les commentaires ne sont pas destinés à des discussions prolongées ; cette conversation a été déplacée vers le chat.

2 votes

Et puis est arrivé Android 11 avec stockage scoped.

36voto

Irfan Latif Points 16863

De grands changements ont eu lieu dans le stockage sous Android 4.4 (voir Parcours du stockage d'Android). Ainsi, ce qui suit est généralement vrai pour Android 4.4+ et en particulier 6+.

Ceci provient de ma réponse détaillée à Comment l'espace disque est-il utilisé sur un appareil Android ? Les fichiers des applications sont enregistrés (par le système et l'application elle-même) dans le stockage interne et externe sous différentes catégories.

Répertoire

Description/API

Code de l'application

/data/app/*

(répertoire d'installation des applications utilisateur)

/data/app/*/base.apk

(fichier .apk original)

/data/app/*/lib//*.so

(bibliothèques partagées)

/data/app/*/oat//base.[art|odex|vdex]

(code exécutable compilé)

/data/dalvik-cache//*.[art|dex|oat|vdex]

(code exécutable compilé, uniquement pour les applications système)

/data/misc/profiles/cur///primary.prof

(profil ART)

/data/misc/profiles/ref//primary.prof

(profil ART)

Stockage interne

/data/user[_de]//

getDataDir

/data/user[_de]///files

getFilesDir

/data/user[_de]///[code_]cache

getCacheDir or getCodeCacheDir

/data/user[_de]///databases

getDatabasePath

/data/user[_de]///no_backup

getNoBackupFilesDir

/data/user[_de]///shared_prefs

getSharedPreferences

Stockage externe

/storage/emulated/obb//*.obb

(partagé par plusieurs utilisateurs, exposé dans la vue suivante)

/storage/emulated//Android/obb//*..obb

getObbDirs

/storage/emulated//Android/media/

getExternalMediaDirs

/storage/emulated//Android/data//

getExternalFilesDirs

/storage/emulated//Android/data//files

getExternalFilesDirs

/storage/emulated//Android/data//[code_]cache

getExternalCacheDirs

  • Tous les chemins ci-dessus dans le stockage interne et externe (primaire et secondaire) sont des répertoires privés de l'application accessibles à l'application respective sans demander d'autorisation. Les applications peuvent également créer d'autres répertoires (non explicitement disponibles via les API) dans leur stockage privé. Tous ces répertoires appartenant à une application sont supprimés lorsque l'application est désinstallée.

  • De plus, les applications peuvent placer leurs données n'importe où sur le stockage externe primaire (y compris certains répertoires standards et les répertoires privés d'autres applications) si l'autorisation WRITE_EXTERNAL_STORAGE est accordée (getExternalStorageDirectory renvoie /storage/emulated/). Pour le stockage externe secondaire et le stockage amovible, SAF est utilisé. Voir les détails dans Comment enregistrer des fichiers sur une carte SD externe ?.

    Cependant, dans Android 10, l'écriture directe sur le stockage partagé externe primaire est obsolète (getExternalStorageDirectory et getExternalStoragePublicDirectory ne sont plus disponibles). Les applications doivent utiliser l'un des fournisseurs de contenu intégrés à Android ; soit MediaStore (pour les fichiers multimédias) ou SAF (pour tout autre type de fichiers).

  • Les chemins /data peuvent être remplacés par /mnt/expand/[UUID] lors de l'utilisation du stockage adoptable. /storage/emulated est remplacé par /storage/[UUID] lors de l'utilisation du stockage externe secondaire (comme une carte SD).

  • Pour les utilisateurs/profiles multiples, est différent, le propriétaire de l'appareil est toujours 0. /data/user/0 est un lien symbolique vers /data/data pour des raisons historiques. Le stockage externe secondaire n'est disponible que pour le propriétaire de l'appareil.

  • Le répertoire OBB est partagé entre les utilisateurs/profiles (jusqu'à Android 9) pour économiser de l'espace. FUSE/sdcardfs expose toujours /storage/emulated/obb en tant que /storage/emulated//Android/obb.

  • /data/user_de est le stockage chiffré du périphérique sur les appareils FBE qui permet à certaines applications de s'exécuter au démarrage sans demander les informations d'identification de l'utilisateur.

  • /data/misc/profiles est utilisé par ART pour la compilation guidée par profil du code des applications.

  • La description de chaque répertoire est assez évidente à partir des noms, les détails peuvent être consultés dans la documentation des API.

  • Les caches sont vidés par le système d'exploitation en cas de manque d'espace, en mettant en priorité les applications dépassant le quota alloué.

  • Les répertoires privés des applications dans le stockage externe ne sont pas automatiquement analysés par le MediaScanner mais les répertoires media le sont.

  • Les caches et les répertoires no_backup ne sont pas sauvegardés dans le cloud. Voir la documentation officielle.

0 votes

Où se trouve /data? Non trouvé dans l'explorateur Windows affichant le stockage interne lors de la connexion du téléphone Android au PC.

11voto

Tom Points 484

La réponse à votre question est trop grande. Cependant, je peux vous donner une réponse de base qui couvre les principes de base.

Il existe deux types d'applications :
Root et non-root.

Les applications Root peuvent essentiellement stocker/modifier des fichiers où elles le souhaitent.

Les applications non-root peuvent seulement stocker/modifier des fichiers ici : /sdcard/ et tous les dossiers qui suivent.
En général, les applications installées se stockent dans /sdcard/Android/data ou /sdcard/Android/obb.
Certaines applications stockent leurs sauvegardes/configurations dans /sdcard/APPNAME/, ou simplement dans le /sdcard/

Pour pouvoir utiliser les applications root, vous devrez avoir rooté votre appareil Android et avoir donné l'autorisation depuis l'une des applications superutilisateur.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X