Android utilise un système de fichiers semblable aux systèmes de fichiers sur disque sur d'autres plates-formes. Plusieurs options s'offrent à vous pour enregistrer les données de votre application :
- Stockage spécifique à l'application : stockez les fichiers uniquement destinés à votre application soit dans des répertoires dédiés au sein d'un volume de stockage interne, soit dans différents répertoires dédiés au sein d'un espace de stockage externe. Utilisez les répertoires de la mémoire de stockage interne pour enregistrer les informations sensibles auxquelles d'autres applications ne doivent pas accéder.
- Stockage partagé : stockez les fichiers que votre application a l'intention de partager avec d'autres applications, y compris les fichiers multimédias, les documents et autres fichiers.
- Préférences : stockez les données primitives privées dans des paires clé/valeur.
- Bases de données : stockez des données structurées dans une base de données privée à l'aide de la bibliothèque de persistance Room.
Le tableau suivant récapitule les caractéristiques pour chacune de ces options :
Type de contenu | Mode d'accès | Autorisations nécessaires | D'autres applications ont-elles accès ? | Fichiers supprimés lors de la désinstallation de l'application ? | |
---|---|---|---|---|---|
Fichiers spécifiques à l'application | Fichiers destinés uniquement à votre application | Depuis la mémoire de stockage interne, getFilesDir() ou getCacheDir() Depuis la mémoire de stockage externe, getExternalFilesDir() ou getExternalCacheDir() |
Jamais nécessaire pour la mémoire de stockage interne Inutile pour la mémoire de stockage externe lorsque votre application est utilisée sur les appareils équipés d'Android 4.4 (niveau d'API 19) ou version ultérieure |
Non | Oui |
Multimédia | Fichiers multimédias partageables (images, fichiers audio, vidéos) | API MediaStore |
READ_EXTERNAL_STORAGE en cas d'accès aux fichiers d'autres applications sur Android 11 (niveau d'API 30) ou version ultérieureREAD_EXTERNAL_STORAGE ou WRITE_EXTERNAL_STORAGE en cas d'accès aux fichiers d'autres applications sur Android 10 (niveau d'API 29)Des autorisations sont requises pour tous les fichiers sur Android 9 (niveau d'API 28) ou version antérieure |
Oui (bien que l'autre application ait besoin de l'autorisation READ_EXTERNAL_STORAGE ) |
Non |
Documents et autres fichiers | Autres types de contenus partageables, y compris les fichiers téléchargés | Framework d'accès au stockage | Aucun | Oui (via le sélecteur de fichiers système) | Non |
Préférences de l'application | Paires clé/valeur | Bibliothèque Jetpack Preferences | Aucune | Non | Oui |
Base de données | Données structurées | Bibliothèque de persistance Room | Aucune | Non | Oui |
La solution que vous choisissez dépend de vos besoins spécifiques :
- De combien d'espace vos données ont-elles besoin ?
- La mémoire de stockage interne dispose d'un espace limité pour les données spécifiques aux applications. Utilisez d'autres types de stockage si vous souhaitez économiser une quantité importante de données.
- Quel est le niveau de fiabilité nécessaire pour l'accès aux données ?
- Si la fonctionnalité de base de votre application nécessite certaines données, par exemple lorsqu'elle démarre, placez-les dans un répertoire de mémoire de stockage interne ou dans une base de données. Les fichiers spécifiques à une application stockés dans un espace de stockage externe ne sont pas toujours accessibles, car certains appareils permettent aux utilisateurs de supprimer un appareil physique correspondant à un stockage externe.
- Quel type de données devez-vous stocker ?
- Si vous disposez de données spécifiques à votre application, utilisez un espace de stockage dédié. Pour le contenu multimédia partageable, utilisez un espace de stockage partagé afin que d'autres applications puissent y accéder. Pour les données structurées, utilisez des préférences (pour les données clé/valeur) ou une base de données (pour les données contenant plus de deux colonnes).
- Les données doivent-elles être privées ?
- Lorsque vous stockez des données sensibles (qui ne doivent pas être accessibles depuis une autre application), utilisez une mémoire de stockage interne, des préférences ou une base de données. La mémoire de stockage interne présente l'avantage d'empêcher les utilisateurs de voir les données.
Catégories d'emplacements de stockage
Android propose deux types d'emplacements de stockage physique : le stockage interne et le stockage externe. Sur la plupart des appareils, la mémoire de stockage interne est plus petite que la mémoire de stockage externe. Cependant, la mémoire de stockage interne est toujours disponible sur tous les appareils, ce qui en fait un emplacement plus fiable pour stocker les données dont dépend votre application.
Les volumes amovibles, tels qu'une carte SD, apparaissent dans le système de fichiers en tant que stockage externe. Android représente ces appareils à l'aide d'un chemin d'accès, tel que /sdcard
.
Par défaut, les applications elles-mêmes sont stockées dans la mémoire de stockage interne. Si la taille de votre APK est très importante, vous pouvez indiquer une préférence dans le fichier manifeste de votre application afin de l'installer sur un espace de stockage externe :
<manifest ... android:installLocation="preferExternal"> ... </manifest>
Autorisations et accès à l'espace de stockage externe
Android définit les autorisations suivantes liées au stockage : READ_EXTERNAL_STORAGE
, WRITE_EXTERNAL_STORAGE
et MANAGE_EXTERNAL_STORAGE
.
Sur les versions antérieures d'Android, les applications devaient déclarer l'autorisation READ_EXTERNAL_STORAGE
pour accéder à tout fichier en dehors des répertoires propres aux applications sur le stockage externe.
En outre, les applications devaient déclarer l'autorisation WRITE_EXTERNAL_STORAGE
pour écrire dans n'importe quel fichier en dehors du répertoire spécifique à l'application.
Les versions plus récentes d'Android s'appuient davantage sur l'objectif d'un fichier que sur son emplacement pour déterminer la capacité d'une application à y accéder et à le modifier. En particulier, si votre application cible Android 11 (niveau d'API 30) ou version ultérieure, l'autorisation WRITE_EXTERNAL_STORAGE
n'a aucune incidence sur l'accès au stockage de votre application. Ce modèle de stockage basé sur l'objectif du fichier améliore la confidentialité, car les applications n'ont accès qu'aux zones du système de fichiers qu'elles utilisent.
Android 11 inclut l'autorisation MANAGE_EXTERNAL_STORAGE
, qui fournit un accès en écriture aux fichiers situés en dehors du répertoire spécifique à l'application et de MediaStore
. Pour en savoir plus sur cette autorisation et pour comprendre pourquoi la plupart des applications n'ont pas besoin de la déclarer afin de répondre à leurs cas d'utilisation, consultez le guide sur la gestion de tous les fichiers sur un périphérique de stockage.
Espace de stockage cloisonné
Pour donner aux utilisateurs plus de contrôle sur leurs fichiers et limiter l'accumulation des fichiers, les applications qui ciblent Android 10 (niveau d'API 29) ou version ultérieure bénéficient d'un accès limité au stockage externe par défaut. C'est ce qu'on appelle également un espace de stockage cloisonné. Ces applications n'ont accès qu'au répertoire spécifique à l'application sur l'espace de stockage externe, ainsi qu'aux types de contenus multimédias qu'elles ont créés.
Utilisez l'espace de stockage cloisonné, sauf si votre application a besoin d'accéder à un fichier stocké en dehors d'un répertoire spécifique à l'application et en dehors d'un répertoire auquel les API MediaStore
peuvent accéder. Si vous stockez des fichiers spécifiques à une application sur un espace de stockage externe, vous pouvez faciliter l'adoption de l'espace de stockage cloisonné en plaçant ces fichiers dans un répertoire spécifique aux applications sur le stockage externe. Ainsi, votre application conserve l'accès à ces fichiers lorsque l'espace de stockage cloisonné est activé.
Pour préparer votre application en vue d'un espace de stockage cloisonné, consultez le guide Cas d'utilisation et bonnes pratiques de stockage. Si votre application répond à un autre cas d'utilisation qui n'est pas couvert par l'espace de stockage cloisonné, envoyez une demande de fonctionnalité. Vous pouvez désactiver temporairement l'utilisation de l'espace de stockage cloisonné.
Afficher les fichiers sur un appareil
Pour afficher les fichiers stockés sur un appareil, utilisez l'Explorateur de fichiers de l'appareil d'Android Studio.
Ressources supplémentaires
Pour en savoir plus sur le stockage des données, consultez les ressources suivantes.