Android permet d'avoir plusieurs utilisateurs sur un même appareil. Pour en savoir plus, consultez la section Prendre en charge plusieurs utilisateurs. Étant donné que tous les packages système ne sont pas utiles pour tous les types d'utilisateurs Android, vous pouvez utiliser une liste d'autorisation pour spécifier les packages système à préinstaller pour chaque type d'utilisateur. En ne préinstallant pas les packages système inutiles, vous pouvez optimiser les temps de création et de démarrage des utilisateurs, ainsi que l'utilisation de la mémoire.
Utilisez des fichiers XML de configuration système, modélisés sur frameworks/base/data/etc/preinstalled-packages-platform.xml
, pour déclarer les packages système qui doivent être installés initialement pour les nouveaux utilisateurs en fonction de leur type d'utilisateur. Idéalement, tous les packages système de l'appareil doivent avoir une entrée dans un fichier XML (clé par son nom de fichier manifeste), à l'exception des superpositions statiques, qui sont traitées automatiquement en fonction de l'entrée de leur package cible de superposition correspondant.
La façon dont l'appareil doit gérer les paquets système qui ne sont pas listés ici est contrôlée par le mode de configuration.
Types d'utilisateurs
Voici les types d'utilisateurs de base (chaque utilisateur appartient à au moins l'un d'eux) :
Type d’utilisateur | Description |
---|---|
SYSTEM |
Utilisateur 0. |
FULL |
Tout utilisateur humain non profilé. |
PROFILE |
Un profil utilisateur humain. |
La signification précise de chacun est définie dans frameworks/base/core/java/android/content/pm/UserInfo.java
.
Vous pouvez obtenir un contrôle plus précis en spécifiant des types d'utilisateurs individuels, car chaque utilisateur correspond exactement à l'un de ces types, y compris les types d'utilisateurs AOSP définis dans frameworks/base/core/java/android/os/UserManager.java
et les types d'utilisateurs personnalisés OEM définis dans frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java.
. Pour en savoir plus, consultez la page Types d'utilisateurs.
Actuellement, les types d'utilisateurs AOSP incluent les suivants:
android.os.usertype.full.SYSTEM
android.os.usertype.full.SECONDARY
android.os.usertype.full.GUEST
android.os.usertype.full.DEMO
android.os.usertype.full.RESTRICTED
android.os.usertype.profile.MANAGED
android.os.usertype.profile.PRIVATE
android.os.usertype.system.HEADLESS
Exemples
Les exemples suivants correspondent aux cas d'utilisation les plus courants:
- Pour qu'un package système soit préinstallé dans l'utilisateur 0 uniquement:
<install-in-user-type package="com.android.example"> <install-in user-type="SYSTEM" /> </install-in-user-type>
- Pour qu'un package système soit préinstallé sur tous les utilisateurs humains (tel qu'un navigateur Web), c'est-à-dire installé sur tout utilisateur de type
FULL
ouPROFILE
, qui s'adresse à tous les utilisateurs humains:<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> <install-in user-type="PROFILE" /> </install-in-user-type>
- Pour qu'un package système soit préinstallé sur tous les utilisateurs humains, à l'exception des utilisateurs de profil.
Par exemple, vous pouvez appliquer cette approche à une application de fond d'écran:
<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> </install-in-user-type>
- Certains packages système doivent être installés sur tous les utilisateurs, quel que soit leur type. Dans ce cas, utilisez:
<install-in-user-type package="com.android.example"> <install-in user-type="SYSTEM"> <install-in user-type="FULL" /> <install-in user-type="PROFILE" /> </install-in-user-type>
- Des options plus précises sont également disponibles en spécifiant des types d'utilisateurs individuels. Par exemple, l'exemple de code suivant installe ce package sur tous les utilisateurs dont le type d'utilisateur est un profil géré ou un invité, ou qui est de type de base
SYSTEM
.<install-in-user-type package="com.android.example"> <install-in user-type="android.os.usertype.profile.MANAGED" /> <install-in user-type="android.os.usertype.full.GUEST" /> <install-in user-type="SYSTEM"> </install-in-user-type>
balise "do-not-install-in"
Vous pouvez également empêcher la préinstallation de packages sur des types d'utilisateurs spécifiques à l'aide de la balise do-not-install-in
. Notez que les balises do-not-install-in
remplacent les balises install-in
dans n'importe quel fichier. Exemple :
<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> <do-not-install-in user-type="android.os.usertype.full.GUEST"/> </install-in-user-type>
android.os.usertype.full.GUEST
(un sous-type de FULL), ce package n'est pas installé, car la balise do-not-install-in
prévaut sur install-in
.
Contrôler le comportement avec config.xml
La valeur de la ressource de configuration config_userTypePackageWhitelistMode
contrôle cette fonctionnalité et détermine comment un appareil interprète les packages système qui n'ont aucune entrée pour aucun type d'utilisateur. Pour en savoir plus, consultez frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode
.
Dans frameworks/base/core/res/res/values/config.xml
, définissez l'entier nommé config_userTypePackageWhitelistMode
sur une combinaison des valeurs suivantes. Ces options peuvent être combinées. Les indicateurs les plus importants sont les suivants:
Valeur | Description |
---|---|
0 (0b0000) |
Désactivez-la. Installez tous les packages système. |
1 (0b0001) |
Appliquez-la. N'installer les packages système que lorsqu'ils sont ajoutés à la liste d'autorisation |
4 (0b0100) |
Considérez tout package qui n'est pas mentionné dans le fichier de liste d'autorisation comme étant implicitement autorisé. |
8 (0b1000) |
Tout paquet non mentionné dans le fichier de liste d'autorisation est considéré comme implicitement autorisé pour l'utilisateur SYSTEM uniquement. |
La configuration suivante active la fonctionnalité (afin que les balises install-in
et do-not-install-in
soient respectées), mais traite tous les paquets système non mentionnés comme s'ils étaient install-in
pour tous les utilisateurs:
<integer name="config_userTypePackageWhitelistMode">5</integer>