Packages système préinstallés

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 :

  1. 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>
    
  2. 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 ou PROFILE , 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>
    
  3. 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>
    
  4. 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>
    
  5. 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>