Android permet d'avoir plusieurs utilisateurs sur un même appareil. Pour en savoir plus, consultez la page Compatibilité avec plusieurs utilisateurs. Étant donné que tous les packages système ne sont pas utiles pour tous les types d’utilisateurs Android, vous Possibilité d'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.
Utiliser des fichiers XML de configuration système, modélisés sur la base de
frameworks/base/data/etc/preinstalled-packages-platform.xml
pour déclarer les packages système à installer 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'entre 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 sont 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.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, cela peut s'appliquer à 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 chaque utilisateur
de données. 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 do-not-install-in
remplacent les balises install-in
dans tous les fichiers. 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
(sous-type de FULL),
ce package n'est pas installé, car do-not-install-in
est prioritaire sur install-in
.
Contrôler le comportement avec config.xml
Valeur config_userTypePackageWhitelistMode
de la ressource de configuration
contrôle cette fonctionnalité et détermine la façon dont un appareil interprète les packages système
qui ne comportent aucune entrée pour un 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
à une combinaison
les valeurs suivantes. Ces indicateurs peuvent être combinés. Les options les plus importantes sont les suivantes:
Valeur | Description |
---|---|
0 (0b0000) |
Désactiver. Installez tous les packages système. |
1 (0b0001) |
Appliquez. Installer uniquement les packages système s'ils figurent sur 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) |
Tous les packages non mentionnés dans le fichier de la liste d'autorisation comme étant implicitement ajoutés à la liste d'autorisation pour l'utilisateur SYSTEM. |
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>