Android prend en charge plusieurs utilisateurs sur un seul appareil. Pour en savoir plus, consultez Prise en charge de plusieurs utilisateurs . Étant donné que tous les packages système ne sont pas utiles à tous les types d'utilisateurs Android, vous pouvez utiliser une liste verte pour spécifier quels packages système doivent être préinstallés sur chaque type d'utilisateur. En ne préinstallant pas de packages système inutiles, vous pouvez optimiser les temps de création des utilisateurs, les heures de démarrage et l'utilisation de la mémoire.
Utilisez les fichiers XML de configuration du système, calqués sur frameworks/base/data/etc/preinstalled-packages-platform.xml
, pour déclarer quels packages système doivent être initialement installés pour les nouveaux utilisateurs en fonction de leur type d'utilisateur. Idéalement, tous les packages système sur l'appareil devraient avoir une entrée dans un fichier XML (saisie par son nom 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 manière dont le périphérique doit gérer les packages système qui ne sont pas répertoriés ici est contrôlée par le mode de configuration .
Types d'utilisateurs
Les types d'utilisateurs de base (chaque utilisateur sera au moins un de ces types) sont :
Type d'utilisateur | Description |
---|---|
SYSTEM | Utilisateur 0. |
FULL | Tout utilisateur humain sans profil. |
PROFILE | Un utilisateur humain de profil. |
La signification précise de chacun est définie dans frameworks/base/core/java/android/content/pm/UserInfo.java
.
Un contrôle plus granulaire peut être obtenu en spécifiant des types d'utilisateurs individuels puisque chaque utilisateur est exactement l'un de ces types d'utilisateurs, ce qui inclut les types d'utilisateurs AOSP définis dans frameworks/base/core/java/android/os/UserManager.java
et tout utilisateur personnalisé OEM. types définis dans frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java.
Consultez la page des types d'utilisateurs pour plus d'informations. Actuellement, les types d’utilisateurs AOSP incluent :
-
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 abordent les 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 (comme un navigateur Web), c'est-à-dire qu'il soit 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 pourrait être appliqué à 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 réellement être présents sur tous les utilisateurs, quel que soit leur type. Dans ces 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 granulaires sont également disponibles en spécifiant des types d'utilisateurs individuels. Par exemple, l'exemple de code suivant installe ce package sur tout utilisateur dont le type d'utilisateur est un profil géré ou un invité ou est d'un 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 ne pas installer
Il est également possible d'empêcher la préinstallation des packages sur des types d'utilisateurs particuliers à l'aide de la balise do-not-install-in
. Notez que do-not-install-in
remplacent les balises install-in
dans n'importe quel fichier. Par 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>Si un utilisateur est du type
android.os.usertype.full.GUEST
(un sous-type de FULL), ce package ne sera pas installé car la balise do-not-install-in
a priorité sur install-in
.Contrôler le comportement avec config.xml
La valeur de ressource de configuration config_userTypePackageWhitelistMode
contrôle cette fonctionnalité et détermine la façon dont un appareil interprète les packages système qui n'ont aucune entrée pour aucun type d'utilisateur. Pour plus d'informations, 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 drapeaux peuvent être combinés. Les drapeaux les plus importants sont :
Valeur | Description |
---|---|
0 (0b0000) | Désactiver. Installez tous les packages système. |
1 (0b0001) | Imposer. N'installez les packages système que lorsqu'ils sont sur liste verte. |
4 (0b0100) | Considérez tout package non mentionné dans le fichier de liste autorisée comme étant implicitement inscrit sur la liste verte. |
8 (0b1000) | Considérez tout package non mentionné dans le fichier de liste autorisée comme étant implicitement inscrit sur la liste verte uniquement pour l'utilisateur SYSTEM. |
La configuration suivante activera la fonctionnalité (de sorte que les balises install-in
et do-not-install-in
soient respectées) mais traitera tous les packages système non mentionnés comme s'ils étaient install-in
pour tous les utilisateurs :
<integer name="config_userTypePackageWhitelistMode">5</integer>