Google s'est engagé à promouvoir l'équité raciale pour les communautés noires. Regarde comment.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Stockage traditionnel

Icône HAL de stockage externe Android

Android prend en charge les appareils avec un stockage traditionnel, qui est défini comme un système de fichiers insensible à la casse avec des classes et des modes d'autorisation POSIX immuables. La notion de stockage traditionnel englobe le stockage émulé et portable. Le stockage portable est défini comme tout stockage externe qui n'est pas adopté par le système et donc non formaté et chiffré ou lié à un périphérique spécifique. Le stockage externe traditionnel offrant une protection minimale des données stockées, le code système ne doit pas stocker de données sensibles sur un stockage externe. Plus précisément, les fichiers de configuration et les fichiers journaux ne doivent être stockés que sur le stockage interne où ils peuvent être efficacement protégés.

Stockage externe multi-utilisateur

À partir d'Android 4.2, les appareils peuvent prendre en charge plusieurs utilisateurs et le stockage externe doit respecter les contraintes suivantes:

  • Chaque utilisateur doit disposer de son propre stockage externe principal isolé et ne doit pas avoir accès au stockage externe principal des autres utilisateurs.
  • Le chemin /sdcard doit être résolu vers le stockage externe principal spécifique à l'utilisateur approprié en fonction de l'utilisateur sous lequel un processus s'exécute.
  • Le stockage des gros fichiers OBB dans le répertoire Android/obb peut être partagé entre plusieurs utilisateurs à titre d'optimisation.
  • Le stockage externe secondaire ne doit pas être accessible en écriture par les applications, sauf dans les répertoires spécifiques au package, comme le permettent les autorisations synthétisées.

L'implémentation de plate-forme par défaut de cette fonctionnalité exploite les espaces de noms du noyau Linux pour créer des tables de montage isolées pour chaque processus Zygote-forké, puis utilise des montages de liaison pour offrir le stockage externe principal spécifique à l'utilisateur approprié dans cet espace de noms privé.

Au démarrage, le système monte un seul démon FUSE de stockage externe émulé sur EMULATED_STORAGE_SOURCE , qui est caché des applications. Après la fourche Zygote, la liaison monte le sous-répertoire spécifique à l'utilisateur approprié sous le démon FUSE vers EMULATED_STORAGE_TARGET afin que les chemins de stockage externes résolvent correctement pour l'application. Étant donné qu'une application ne dispose pas de points de montage accessibles pour le stockage des autres utilisateurs, ils ne peuvent accéder au stockage que pour l'utilisateur avec lequel elle a été démarrée.

Cette implémentation utilise également la fonctionnalité de noyau de sous-arborescence partagée pour propager les événements de montage de l'espace de noms racine par défaut dans les espaces de noms d'application, ce qui garantit que les fonctionnalités telles que les conteneurs ASEC et le montage OBB continuent de fonctionner correctement. Pour ce faire, il monte le rootfs comme partagé, puis le remonte en tant qu'esclave après la création de chaque espace de noms Zygote.

Plusieurs périphériques de stockage externes

À partir d'Android 4.4, plusieurs périphériques de stockage externes sont présentés aux développeurs via Context.getExternalFilesDirs() , Context.getExternalCacheDirs() et Context.getObbDirs() .

Les périphériques de stockage externes apparus via ces API doivent être une partie semi-permanente de l'appareil (comme un emplacement pour carte SD dans un compartiment de batterie). Les développeurs s'attendent à ce que les données stockées dans ces emplacements soient disponibles sur de longues périodes. Pour cette raison, les périphériques de stockage transitoires (tels que les lecteurs de stockage de masse USB) ne doivent pas être mis en évidence via ces API.

L'autorisation WRITE_EXTERNAL_STORAGE doit uniquement accorder l'accès en écriture au stockage externe principal sur un périphérique. Les applications ne doivent pas être autorisées à écrire sur des périphériques de stockage externes secondaires, sauf dans leurs répertoires spécifiques au package, comme le permettent les autorisations synthétisées. La restriction des écritures de cette manière garantit que le système peut nettoyer les fichiers lorsque les applications sont désinstallées.

Prise en charge des supports USB

Android 6.0 prend en charge les périphériques de stockage portables qui ne sont connectés à l'appareil que pendant une courte période, comme les clés USB. Lorsqu'un utilisateur insère un nouvel appareil portable, la plate-forme affiche une notification pour lui permettre de copier ou de gérer le contenu de cet appareil.

Dans Android 6.0, tout appareil non adopté est considéré comme portable. Le stockage portable n'étant connecté que pendant une courte période, la plate-forme évite les opérations lourdes telles que la numérisation de supports. Les applications tierces doivent passer par Storage Access Framework pour interagir avec les fichiers sur le stockage portable; l'accès direct est explicitement bloqué pour des raisons de confidentialité et de sécurité.