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 usar una lista de entidades permitidas para especificar qué paquetes del sistema deben estar preinstalados en cada tipo de usuario. Si no preinstalas paquetes del sistema innecesarios, puedes optimizar los tiempos de creación y de inicio de los usuarios, así como el uso de la memoria.
Usa archivos en formato XML de configuración del sistema, modelados en frameworks/base/data/etc/preinstalled-packages-platform.xml
, para declarar qué paquetes del sistema se deben instalar inicialmente para los usuarios nuevos según su tipo de usuario. Idealmente, todos los paquetes del sistema del dispositivo deben tener una entrada en un archivo 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.
El modo de configuración controla la forma en que el dispositivo debe controlar los paquetes del sistema que no se mencionan aquí.
Tipos de usuarios
Los tipos de usuarios básicos (cada usuario es, al menos, uno de estos tipos) son los siguientes:
Tipo de usuario | Descripción |
---|---|
SYSTEM |
Usuario 0. |
FULL |
Cualquier usuario humano que no sea de 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 tipos de usuarios individuales, ya que cada usuario es exactamente uno de estos tipos, lo que incluye los tipos de usuarios de AOSP definidos en frameworks/base/core/java/android/os/UserManager.java
y cualquier tipo de usuario personalizado del OEM definido en frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java.
. Consulta la página Tipos de usuarios para obtener más 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.profile.PRIVATE
android.os.usertype.system.HEADLESS
Ejemplos
En los siguientes ejemplos, se abordan los casos de uso más comunes:
- 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>
- 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
oPROFILE
, 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>
- Para que un paquete del sistema se preinstale en todos los usuarios humanos, excepto en los usuarios de perfil.
Por ejemplo, esto se podría aplicar a una app de fondo de pantalla:
<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> </install-in-user-type>
- 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>
- También hay opciones más detalladas disponibles si especificas tipos de usuarios individuales. 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>
android.os.usertype.full.GUEST
(un subtipo de FULL),
este paquete no está instalado 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) |
Considera que cualquier paquete que no se mencione en el archivo de la lista de entidades permitidas se incluye de forma implícita en ella. |
8 (0b1000) |
Considera que cualquier paquete que no se mencione en el archivo de la lista de entidades permitidas está incluido de forma implícita solo para el usuario del SISTEMA. |
La siguiente configuración habilita la función (para que se cumplan las etiquetas install-in
y do-not-install-in
), pero trata los paquetes del sistema que no se mencionan como si fueran install-in
para todos los usuarios:
<integer name="config_userTypePackageWhitelistMode">5</integer>