Paquetes de sistema preinstalados

Android admite varios usuarios en un solo dispositivo. Para obtener más información, consulta Cómo admitir varios usuarios. Como no todos los paquetes del sistema son útiles para todos los tipos de usuarios de Android, puedes Puedes usar una lista de entidades permitidas para especificar qué paquetes del sistema deben instalarse previamente. en cada tipo de usuario. Al no preinstalar paquetes de sistema innecesarios, puede optimizar los tiempos de creación, de inicio y uso de memoria de los usuarios.

Usar archivos XML de configuración del sistema, basados en frameworks/base/data/etc/preinstalled-packages-platform.xml: para declarar los paquetes de sistema que se deben instalar inicialmente para los usuarios nuevos según el tipo de usuario. Idealmente, todos los paquetes del sistema del dispositivo deben tener una entrada en un archivo en formato XML (con clave según su nombre de manifiesto), excepto las superposiciones estáticas, que se tratan automáticamente según la entrada de su paquete de destino de superposición correspondiente. La forma en que el dispositivo debería manejar paquetes de sistema que no se mencionan aquí es controlado por el config mode.

Tipos de usuario

Los tipos de usuario base (todos los usuarios son, al menos, uno de estos tipos) son los siguientes:

Tipo de usuario Descripción
SYSTEM Usuario 0.
FULL Cualquier usuario humano sin perfil.
PROFILE Un usuario humano de perfil.

El significado preciso de cada uno se define en frameworks/base/core/java/android/content/pm/UserInfo.java.

Se puede obtener un control más detallado si se especifican los tipos de usuarios individuales, ya que cada usuario es exactamente uno de estos tipos, que incluye las categorías de usuarios del AOSP definido en frameworks/base/core/java/android/os/UserManager.java y cualquier tipo de usuario personalizado de OEM definido en frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java. Consulta la página de tipos de usuario para obtener más información. información. Actualmente, los tipos de usuarios de AOSP incluyen los siguientes:

  • 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

Ejemplos

En los siguientes ejemplos, se abordan los casos de uso más comunes:

  1. Para que un paquete del sistema se preinstale solo en el usuario 0, haz lo siguiente:
    <install-in-user-type package="com.android.example">
        <install-in user-type="SYSTEM" />
     </install-in-user-type>
  2. Para que un paquete del sistema se instale de forma predeterminada en todos los usuarios humanos (como un navegador web), es decir, en cualquier usuario de tipo FULL o PROFILE, que se dirija a todos los usuarios humanos, haz lo siguiente:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
        <install-in user-type="PROFILE" />
    </install-in-user-type>
  3. Un paquete de sistema que se preinstale en todos los usuarios humanos, excepto los usuarios de perfiles Por ejemplo, esto podría aplicarse a una app de fondo de pantalla:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
    </install-in-user-type>
  4. Algunos paquetes del sistema realmente deben estar en todos los usuarios, independientemente del tipo. En estos casos, usa lo siguiente:
    <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. También hay disponibles opciones más detalladas si especificas usuarios individuales de tipos de datos. Por ejemplo, el siguiente código de muestra instala este paquete en cualquier usuario cuyo tipo de usuario sea un perfil administrado, un invitado o un tipo 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>

etiqueta do-not-install-in

También se puede evitar que los paquetes se instalen previamente en tipos de usuarios específicos con la etiqueta do-not-install-in. Ten en cuenta que las etiquetas do-not-install-in anula las etiquetas install-in en cualquier archivo. Por ejemplo:

<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 usuario es del tipo android.os.usertype.full.GUEST (un subtipo de FULL), este paquete no se instala porque la etiqueta do-not-install-in tiene prioridad sobre install-in.

Controla el comportamiento con config.xml

El valor del recurso de configuración config_userTypePackageWhitelistMode controla esta función y determina cómo un dispositivo interpreta los paquetes del sistema que no tienen entradas para ningún tipo de usuario. Para obtener más información, consulta frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode

En frameworks/base/core/res/res/values/config.xml, establece el número entero llamado config_userTypePackageWhitelistMode en una combinación de los siguientes valores. Estas marcas se pueden combinar. Las marcas más importantes son las siguientes:

Valor Descripción
0 (0b0000) Inhabilitar. Instala todos los paquetes del sistema.
1 (0b0001) Aplicar. Instala solo paquetes del sistema cuando estén en la lista de entidades permitidas.
4 (0b0100) Ten en cuenta que cualquier paquete que no se menciona en el archivo de la lista de entidades permitidas se encuentra en la lista de entidades permitidas implícitamente.
8 (0b1000) Ten en cuenta que cualquier paquete que no se menciona en el archivo de lista de entidades permitidas se encuentra en la lista de entidades permitidas implícitamente solo para el usuario de SYSTEM.

La siguiente configuración habilita la función (para que install-in y Se respetan las etiquetas do-not-install-in), pero se trata cualquier elemento no mencionado. paquetes de sistema como si fueran install-in para todos los usuarios:

<integer name="config_userTypePackageWhitelistMode">5</integer>