Emplacement d'installation de l'application

À partir du niveau d'API 8, vous pouvez autoriser l'installation de votre application sur le stockage externe (par exemple, la carte SD de l'appareil). Il s'agit d'une fonctionnalité facultative que vous pouvez déclarer pour votre application à l'aide de l'attribut du fichier manifeste android:installLocation. Si vous ne déclarez pas cet attribut, votre application sera installée uniquement dans la mémoire de stockage interne et ne pourra pas être déplacée vers la mémoire de stockage externe.

Pour permettre au système d'installer votre application sur la mémoire de stockage externe, modifiez votre fichier manifeste en incluant l'attribut android:installLocation dans l'élément <manifest>, avec une valeur preferExternal ou auto. Exemple :

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="preferExternal"
    ... >

Si vous déclarez preferExternal, vous demandez l'installation de votre application sur le stockage externe, mais le système ne le garantit pas. Si la mémoire de stockage externe est saturée, le système l'installe dans la mémoire de stockage interne. L'utilisateur peut également déplacer votre application entre les deux emplacements.

Si vous déclarez auto, vous indiquez que votre application peut être installée sur le stockage externe, mais que vous n'avez pas de préférence d'emplacement d'installation. Le système décidera de l'emplacement de votre application en fonction de plusieurs facteurs. L'utilisateur peut également déplacer votre application entre les deux emplacements.

Lorsque votre application est installée dans la mémoire de stockage externe :

  • Il n'y a aucun effet sur les performances de l'application tant que la mémoire de stockage externe est installée sur l'appareil.
  • Le fichier .apk est enregistré dans la mémoire de stockage externe, mais toutes les données utilisateur privées, les bases de données, les fichiers .dex optimisés et le code natif extrait le se trouvent dans la mémoire de l'appareil interne.
  • Le conteneur unique dans lequel votre application est stockée est chiffré à l'aide d'une clé générée de manière aléatoire, qui ne peut être déchiffrée que par l'appareil qui l'a initialement installée. Ainsi, une application installée sur une carte SD ne fonctionne qu'avec un seul appareil.
  • L'utilisateur peut déplacer votre application vers la mémoire de stockage interne via les paramètres système.

Avertissement : Lorsque l'utilisateur active le stockage de masse USB pour partager des fichiers avec un ordinateur ou désinstalle la carte SD via les paramètres système, la mémoire de stockage externe est désinstallée de l'appareil et toutes les applications en cours d'exécution sur celle-ci sont immédiatement interrompues.

Rétrocompatibilité.

La possibilité d'installation de votre application sur la mémoire de stockage externe n'est disponible que sur les appareils exécutant le niveau d'API 8 (Android 2.2) ou une version ultérieure. Les applications existantes créées avant le niveau d'API 8 s'installent toujours dans la mémoire de stockage interne et ne peuvent pas être déplacées vers la mémoire de stockage externe (même sur les appareils dotés du niveau d'API 8). Toutefois, si votre application est conçue pour être compatible avec un niveau d'API inférieur à 8, vous pouvez choisir d'inclure cette fonctionnalité pour les appareils de niveau d'API 8 ou supérieur, tout en restant compatible avec les appareils dotés d'un niveau d'API inférieur à 8.

Pour autoriser l'installation sur un espace de stockage externe et rester compatible avec les versions antérieures à l'API niveau 8 :

  1. Incluez l'attribut android:installLocation avec la valeur auto ou preferExternal dans l'élément <manifest>.
  2. Laissez votre attribut android:minSdkVersion tel quel (inférieur à "8") et assurez-vous que le code de votre application n'utilise que des API compatibles avec ce niveau.
  3. Pour compiler votre application, définissez votre cible de compilation sur le niveau d'API 8. Cela est nécessaire, car les anciennes bibliothèques Android ne comprennent pas l'attribut android:installLocation et ne compilent pas votre application lorsqu'il est présent.

Lorsque votre application est installée sur un appareil dont le niveau d'API est inférieur à 8, l'attribut android:installLocation est ignoré et l'application est installée dans la mémoire de stockage interne.

Attention : Bien qu'un balisage XML de ce type soit ignoré par les anciennes plates-formes, vous devez veiller à ne pas utiliser les API de programmation introduites dans le niveau d'API 8 tant que votre minSdkVersion est inférieur à "8", sauf si vous faites le nécessaire pour assurer la rétrocompatibilité dans votre code.

Applications à NE PAS installer sur le stockage externe

Lorsque l'utilisateur active le stockage de masse USB pour partager des fichiers avec son ordinateur (ou qu'il désinstalle ou supprime la mémoire de stockage externe), toutes les applications installées sur la mémoire de stockage externe et en cours d'exécution sont interrompues. Le système ne reconnaît plus l'application jusqu'à ce que le stockage de masse soit désactivé et que le stockage externe soit installé à nouveau sur l'appareil. En plus de fermer l'application et de la rendre indisponible pour l'utilisateur, cela peut endommager plus gravement certains types d'applications. Pour que votre application se comporte de manière cohérente comme prévu, vous ne devez pas autoriser son installation sur la mémoire de stockage externe si elle utilise l'une des fonctionnalités suivantes, en raison des conséquences évoquées lorsque la mémoire de stockage externe est désinstallée :

Services
Votre Service exécuté est interrompu et n'est pas redémarré lorsque l'espace de stockage externe est réinstallé. Les applications liées à ce service peuvent s'inscrire à l'intent de diffusion ACTION_EXTERNAL_APPLICATIONS_AVAILABLE, qui notifie toutes les applications qui ne sont pas installées sur un espace de stockage externe lorsque les applications installés sur un espace de stockage externe sont de nouveau disponibles pour le système. Après avoir reçu cette diffusion, les applications peuvent tenter de s'associer à votre service.
Services d'alarme
Vos alarmes enregistrées avec AlarmManager seront annulées. Vous devrez réenregistrer manuellement les alarmes lorsque la mémoire de stockage externe sera réinstallée.
Moteurs de mode de saisie
Votre moteur de mode de saisie (IME) sera remplacé par le moteur de mode de saisie par défaut. Lorsque le stockage externe est réinstallé, l'utilisateur peut ouvrir les paramètres système pour réactiver votre IME.
Fonds d'écran animés
Votre fond d'écran animé sera remplacé par le fond d'écran animé par défaut. Lorsque le stockage externe est réinstallé, l'utilisateur peut sélectionner à nouveau votre fond d'écran animé.
Widgets d'application
Votre widget d'application sera supprimé de l'écran d'accueil. Lorsque le stockage externe est réinstallé, l'utilisateur ne peut pas sélectionner votre widget d'application tant que le système n'a pas réinitialisé l'application d'accueil (généralement, seulement après un redémarrage du système).
Gestionnaires de comptes
Vos comptes créés avec AccountManager disparaîtront jusqu'à ce que le stockage externe soit réinstallé.
Adaptateurs de synchronisation
Votre AbstractThreadedSyncAdapter et toutes ses fonctionnalités de synchronisation ne fonctionneront pas tant que le stockage externe n'aura pas été réinstallé.
Administrateurs appareil
Votre DeviceAdminReceiver et toutes ses fonctionnalités d'administration seront désactivés, ce qui peut avoir des conséquences imprévisibles sur les fonctionnalités de l'appareil, qui peuvent persister une fois le stockage externe réinstallé.
Broadcast receivers écoutant le message "Démarrage terminé"
Le système diffuse ACTION_BOOT_COMPLETED avant l'installation de la mémoire de stockage externe sur l'appareil. Si votre application est installée sur le stockage externe, elle ne pourra jamais recevoir ce message.

Si votre application utilise l'une des fonctionnalités indiquées ci-dessus, vous ne devez pas l'autoriser à être installée sur un espace de stockage externe. Par défaut, le système n'autorise pas l'installation de votre application sur le stockage externe. Vous n'avez donc pas à vous soucier de vos applications existantes. Toutefois, si vous êtes certain que votre application ne doit jamais être installée sur le stockage externe, vous devez le préciser en déclarant android:installLocation avec la valeur internalOnly. Cela ne change pas le comportement par défaut mais, ce faisant, vous indiquez explicitement que votre application ne doit être installée que dans la mémoire de stockage interne. Cette méthode vous rappelle, ainsi qu'aux autres développeurs, que cette décision a été prise.

Applications à installer sur le stockage externe

En bref, tout élément qui n'utilise pas les fonctionnalités recensées dans la section précédente peut être installé sur un espace de stockage externe. Les jeux volumineux doivent souvent permettre l'installation sur un espace de stockage externe, car ils fournissent rarement des services supplémentaires lorsqu'ils sont inactifs. Lorsque le stockage externe devient indisponible et que le processus de jeu est interrompu, il ne doit y avoir aucun effet visible lorsque l'espace de stockage est à nouveau disponible et que l'utilisateur redémarre le jeu (en supposant que son état a été correctement enregistré dans le cycle de vie normal de l'activité).

Si votre application nécessite plusieurs mégaoctets pour le fichier APK, vous devez soigneusement décider si vous voulez autoriser son installation sur la mémoire de stockage externe afin que les utilisateurs puissent conserver de l'espace dans leur mémoire de stockage interne.

Pour en savoir plus, consultez la page suivante : <manifest>