Android a évolué au fil du temps pour prendre en charge un large éventail de types et de fonctionnalités d'appareils de stockage. Toutes les versions d'Android sont compatibles avec les appareils dotés d'un espace de stockage traditionnel, qui comprend un espace de stockage portable et émulé. Le stockage portable peut être fourni par des supports physiques, tels qu'une carte SD ou une clé USB, qui servent au transfert temporaire de données/au stockage de fichiers. Le support physique peut rester avec l'appareil pendant une période prolongée, mais n'est pas lié à l'appareil et peut être supprimé. Les cartes SD sont disponibles en tant que stockage portable depuis Android 1.0. Android 6.0 a ajouté la prise en charge d'USB. Le stockage émulé est fourni en exposant une partie de l'espace de stockage interne via une couche d'émulation. Il est disponible depuis Android 3.0.
À partir d'Android 6.0, Android est compatible avec le stockage adoptable, fourni par un support physique, comme une carte SD ou une clé USB, qui est chiffré et formaté pour se comporter comme une mémoire de stockage interne. Le stockage adoptable peut stocker tous les types de données d'application.
Autorisations
L'accès au stockage externe est protégé par diverses autorisations Android.
À partir d'Android 1.0, l'accès en écriture est protégé par l'autorisation WRITE_EXTERNAL_STORAGE
. À partir d'Android 4.1, l'accès en lecture est protégé par l'autorisation READ_EXTERNAL_STORAGE
.
À partir d'Android 4.4, le propriétaire, le groupe et les modes des fichiers sur les appareils de stockage externes sont désormais synthétisés en fonction de la structure de répertoire. Cela permet aux applications de gérer leurs répertoires spécifiques au package sur un stockage externe sans avoir à détenir l'autorisation WRITE_EXTERNAL_STORAGE
étendue.
Par exemple, l'application avec le nom de package com.example.foo
peut désormais accéder librement à Android/data/com.example.foo/
sur les appareils de stockage externes sans autorisation. Ces autorisations synthétisées sont obtenues en encapsulant des périphériques de stockage bruts dans un daemon FUSE.
À partir d'Android 10, les applications qui ciblent Android 9 ou version antérieure utilisent par défaut l'ancien stockage et peuvent activer le stockage isolé.
Les applications qui ciblent Android 10 et utilisent par défaut un stockage isolé peuvent désactiver temporairement ce mode. Utilisez l'attribut de fichier manifeste requestLegacyExternalStorage
, qui contrôle le modèle de stockage, pour modifier l'état par défaut.
Étant donné que les autorisations READ_EXTERNAL_STORAGE
et WRITE_EXTERNAL_STORAGE
sont soumises à une restriction logicielle, si l'installateur n'a pas ajouté l'application à la liste blanche, l'autorisation contrôle uniquement l'accès aux collections auditives et visuelles, sans accès à la carte SD. Cela s'applique même si l'application demande un ancien stockage. Pour en savoir plus sur les restrictions strictes et les restrictions souples, consultez la section
Restrictions strictes et souples dans Android 10.
Si le programme d'installation a ajouté l'autorisation à la liste blanche, une application exécutée en ancien mode obtient le comportement d'autorisation non isolée. L'autorisation contrôle l'accès à la carte SD, ainsi que les collections sonores et visuelles. Cela se produit lorsque l'application cible Android 9 ou version antérieure et ne l'active pas, ou qu'elle cible Android 10 et la désactive.
L'état de la liste blanche ne peut être spécifié qu'au moment de l'installation et ne peut être modifié qu'une fois l'application installée.
Pour en savoir plus sur la définition de l'autorisation READ_EXTERNAL_STORAGE
, consultez
setWhitelistedRestrictedPermissions()
dans la classe
PackageInstaller.SessionParams.
Android 13 introduit des autorisations multimédias précises pour prendre en charge les applications qui accèdent aux fichiers multimédias créés par d'autres applications. Les applications doivent demander une ou plusieurs des autorisations multimédias précises listées dans la section
Autorisations multimédias précises au lieu de l'autorisation READ_EXTERNAL_STORAGE
.
Android 14 s'appuie sur des autorisations multimédias précises pour permettre aux utilisateurs d'accorder un accès partiel à leur bibliothèque multimédia visuelle lorsque les applications demandent des autorisations multimédias. Pour en savoir plus, consultez Accorder un accès limité aux photos et aux vidéos.
Autorisations d'exécution
Android 6.0 introduit un nouveau modèle d'
autorisations d'exécution, dans lequel les applications demandent des fonctionnalités lorsqu'elles sont nécessaires au moment de l'exécution. Étant donné que le nouveau modèle inclut les autorisations READ/WRITE_EXTERNAL_STORAGE
, la plate-forme doit accorder dynamiquement l'accès au stockage sans arrêter ni redémarrer les applications déjà en cours d'exécution. Pour ce faire, il conserve trois vues distinctes de tous les périphériques de stockage installés:
/mnt/runtime/default
est affiché aux applications sans autorisations de stockage spéciales, ainsi qu'à l'espace de noms racine où se trouventadbd
et d'autres composants système./mnt/runtime/read
est affiché pour les applications avecREAD_EXTERNAL_STORAGE
(définirLEGACY_STORAGE
pour Android 10)/mnt/runtime/write
est affiché pour les applications avecWRITE_EXTERNAL_STORAGE
Au moment du fork de Zygote, nous créons un espace de noms de montage pour chaque application en cours d'exécution et nous liions la vue initiale appropriée en place. Plus tard, lorsque les autorisations d'exécution sont accordées, vold
accède à l'espace de noms de montage des applications déjà en cours d'exécution et lie les montages de la vue mise à niveau. Notez que la rétrogradation des autorisations entraîne toujours l'arrêt de l'application.
La fonctionnalité setns()
utilisée pour implémenter cette fonctionnalité nécessite au moins Linux 3.8, mais les correctifs ont été rétroportés avec succès vers Linux 3.4. Le test CTS PermissionsHostTest
peut être utilisé pour vérifier le bon comportement du noyau.