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:
- 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>
- 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>
- 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 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>
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>