Pacotes de sistema pré-instalados

O Android suporta vários usuários em um único dispositivo. Para saber mais, consulte 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, você pode usar uma lista de permissões para especificar quais pacotes do sistema devem 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 de usuários, horários de início e uso de memória.

Use arquivos XML de configuração do sistema, modelados em frameworks/base/data/etc/preinstalled-packages-platform.xml , para declarar quais pacotes do sistema devem ser instalados inicialmente para novos usuários com base em seu tipo de usuário. Idealmente, todos os pacotes do sistema no dispositivo devem ter uma entrada em um arquivo XML (digitado por seu nome de manifesto), exceto para sobreposições estáticas, que são tratadas automaticamente de acordo com a entrada do pacote de destino de sobreposição correspondente. A maneira como o dispositivo deve lidar com os pacotes do sistema que não estão listados aqui é controlada pelo modo de configuração .

Tipos de usuário

Os tipos de usuários básicos (cada usuário será 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 de perfil.

O significado preciso de cada um é definido em frameworks/base/core/java/android/content/pm/UserInfo.java .

Um controle mais granular pode ser obtido especificando tipos de usuários individuais, uma vez que cada usuário é exatamente um desses tipos de usuários, o que inclui os tipos de usuários AOSP definidos em frameworks/base/core/java/android/os/UserManager.java e qualquer usuário personalizado OEM tipos definidos em frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java. Consulte a página de tipos de usuário para obter mais informações. Atualmente, os tipos de usuários 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:

  1. Para que um pacote de sistema seja pré-instalado apenas no usuário 0:
    <install-in-user-type package="com.android.example">
        <install-in user-type="SYSTEM" />
     </install-in-user-type>
    
  2. Para que um pacote de sistema seja pré-instalado em todos os usuários humanos (como um navegador web), ou seja, para ser instalado em qualquer usuário do tipo FULL ou PROFILE , que endereça 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>
    
  3. Para que um pacote de sistema seja pré-instalado em todos os usuários humanos, exceto usuários de perfil. Por exemplo, isso poderia ser aplicado a um aplicativo de papel de parede:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
    </install-in-user-type>
    
  4. Alguns pacotes de sistema realmente precisam estar disponíveis para todos os usuários, independentemente do tipo. Nestes 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>
    
  5. Opções mais granulares também estão disponíveis especificando tipos de usuários individuais. Por exemplo, o código de exemplo a seguir instala esse pacote em qualquer usuário cujo tipo de usuário seja um perfil gerenciado ou convidado ou seja do tipo 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 não instalar

Os pacotes também podem ser impedidos de serem pré-instalados em determinados tipos de usuários usando a tag do-not-install-in . Observe que as tags do-not-install-in substituem install-in em qualquer arquivo. Por 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>
Se um usuário for do tipo android.os.usertype.full.GUEST (um subtipo de FULL), este pacote não será instalado porque a tag do-not-install-in tem precedência sobre install-in .

Controlando o comportamento com 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 possuem entrada para nenhum tipo de usuário. Para obter mais informações, consulte frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode .

Em frameworks/base/core/res/res/values/config.xml , configure o número inteiro denominado config_userTypePackageWhitelistMode como uma combinação dos valores a seguir. Esses sinalizadores podem ser combinados. As bandeiras mais importantes são:

Valor Descrição
0 (0b0000) Desativar. Instale todos os pacotes do sistema.
1 (0b0001) Aplicar. Instale pacotes do sistema apenas quando estiver na lista de permissões.
4 (0b0100) Considere qualquer pacote não mencionado no arquivo da lista de permissões como implicitamente incluído na lista de permissões.
8 (0b1000) Considere qualquer pacote não mencionado no arquivo da lista de permissões como implicitamente incluído na lista de permissões apenas para o usuário SYSTEM.

A configuração a seguir ativará o recurso (para que as tags install-in e do-not-install-in sejam obedecidas), mas tratará quaisquer pacotes de sistema não mencionados como se fossem install-in para todos os usuários:

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