O Android permite ter vários usuários em um único dispositivo. Para saber mais, consulte Como oferecer suporte a vários usuários. Como nem todos os pacotes do sistema são úteis para todos os tipos de usuários do Android, é possível usar uma lista de permissões para especificar quais pacotes do sistema precisam ser pré-instalados em cada tipo de usuário. Ao não pré-instalar pacotes de sistema desnecessários, você pode otimizar os tempos de criação e início do usuário e o uso da memória.
Use arquivos XML de configuração do sistema, modelados
frameworks/base/data/etc/preinstalled-packages-platform.xml
,
para declarar quais pacotes do sistema devem ser instalados inicialmente para novos usuários
com base no tipo de usuário. O ideal é que todos os pacotes do sistema no dispositivo tenham
uma entrada em um arquivo XML (codificada pelo nome do manifesto), exceto para sobreposições estáticas,
que são tratados automaticamente de acordo com a entrada do conjunto
o pacote de destino da sobreposição.
A maneira como o dispositivo
deve lidar com pacotes de sistema que não estão listados aqui é controlado pelo
modo de configuração.
Tipos de usuários
Os tipos de usuário base (cada usuário é pelo menos um desses tipos) são:
Tipo de usuário | Descrição |
---|---|
SYSTEM |
Usuário 0. |
FULL |
Qualquer usuário humano sem perfil. |
PROFILE |
Um usuário humano do perfil. |
O significado exato de cada um deles é definido em
frameworks/base/core/java/android/content/pm/UserInfo.java
.
É possível ter um controle mais granular ao especificar tipos de usuários individuais,
cada usuário é exatamente um desses tipos, o que inclui os tipos de usuário do AOSP
definido em frameworks/base/core/java/android/os/UserManager.java
e todos os tipos de usuários personalizados OEM definidos no
frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java.
Consulte a página Tipos de usuário para mais
informações imprecisas ou inadequadas.
Atualmente, os tipos de usuários do AOSP incluem:
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
Exemplos
Os exemplos a seguir abordam os casos de uso mais comuns:
- Para que um pacote do sistema seja pré-instalado somente no usuário 0:
<install-in-user-type package="com.android.example"> <install-in user-type="SYSTEM" /> </install-in-user-type>
- Para que um pacote do sistema seja pré-instalado em todos os usuários humanos (como um navegador da Web),
ou seja, instalada em qualquer usuário do tipo
FULL
ouPROFILE
. que aborda todos os usuários humanos:<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> <install-in user-type="PROFILE" /> </install-in-user-type>
- Para um pacote do sistema ser pré-instalado em todos os usuários humanos, exceto para usuários de perfil.
Por exemplo, isso pode ser aplicado a um app de plano de fundo:
<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> </install-in-user-type>
- Alguns pacotes do sistema realmente precisam estar em todos os usuários, independentemente do
tipo. Nesses casos, use:
<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>
- Também há opções mais granulares disponíveis com a especificação
tipos Por exemplo, o exemplo de código a seguir instala esse pacote em qualquer usuário
com um tipo de usuário que é um perfil gerenciado, um convidado ou pertence a um
SYSTEM
. tipo base.<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>
tag "do-not-install-in"
Os pacotes também podem ser impedidos de serem pré-instalados em tipos de usuário específicos
usando a tag do-not-install-in
. Observe que do-not-install-in
as tags substituem as tags install-in
em qualquer arquivo. Exemplo:
<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
(um subtipo de FULL):
este pacote não está instalado porque do-not-install-in
tem precedência sobre install-in
.
Controlar o comportamento com o config.xml
O valor do recurso de configuração config_userTypePackageWhitelistMode
controla esse recurso e determina como um dispositivo interpreta pacotes do sistema
que não têm entrada para nenhum tipo de usuário. Para mais informações, consulte
frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode
:
Em frameworks/base/core/res/res/values/config.xml
, defina o número inteiro
chamado config_userTypePackageWhitelistMode
como uma combinação dos
seguintes valores. Essas flags podem ser combinadas. As flags mais importantes são:
Valor | Descrição |
---|---|
0 (0b0000) |
Desativar. Instale todos os pacotes do sistema. |
1 (0b0001) |
Aplicar. Instalar pacotes do sistema apenas quando estiverem na lista de permissões. |
4 (0b0100) |
Considere que todos os pacotes não mencionados no arquivo da lista de permissões estão implicitamente na lista de permissões. |
8 (0b1000) |
Considera qualquer pacote não mencionado no arquivo de lista de permissões como implicitamente incluído na lista de permissões apenas para o usuário SYSTEM. |
A configuração a seguir ativa o recurso (para que as tags install-in
e
do-not-install-in
sejam obedecidas), mas trata todos os pacotes de sistema não mencionados
como se fossem install-in
para todos os usuários:
<integer name="config_userTypePackageWhitelistMode">5</integer>