Implementando o Gerenciamento de Dispositivos

Esta seção descreve como habilitar e validar os recursos de gerenciamento de dispositivos necessários para preparar dispositivos para perfis gerenciados. Ele também abrange casos de usuários de proprietários de dispositivos que são essenciais em um ambiente corporativo.

Além do código AOSP, um dispositivo requer os seguintes componentes para funcionar com perfis gerenciados.

Requerimentos gerais

Os dispositivos que pretendem oferecer suporte ao gerenciamento de dispositivos devem atender aos seguintes requisitos gerais.

Valores térmicos de HAL

O Android 7.0 e posterior inclui suporte para a API HardwarePropertiesManager, uma API de monitoramento de dispositivos e relatórios de integridade que permite que os aplicativos consultem o estado do hardware do dispositivo. Essa API é exposta via android.os.HardwarePropertiesManager e faz chamadas por meio de HardwarePropertiesManagerService para o HAL térmico de hardware ( hardware/libhardware/include/hardware/thermal.h ). É uma API protegida, o que significa que apenas os aplicativos Device Policy Controller (DPC) do proprietário do dispositivo/perfil e o VrListenerService atual podem chamá-lo.

Para oferecer suporte à API HardwarePropertiesManager, a implementação do HAL térmico do dispositivo deve ser capaz de relatar os seguintes valores:

Valor Escala de relatórios Permite
Temperatura de [CPU|GPU|Bateria|Device Skin] Temperatura do componente em graus Celsius Os aplicativos podem verificar as temperaturas do dispositivo e as temperaturas de limitação/desligamento de componentes
Tempos ativados/totais da CPU Tempo em milissegundos Os aplicativos podem verificar o uso da CPU por núcleo
Velocidade do ventilador RPM Os aplicativos podem verificar a velocidade do ventilador

As implementações devem lidar corretamente com situações de valores de relatório quando um núcleo (ou GPU, bateria, ventoinha) fica offline ou é conectado/desconectado.

Ativando o gerenciamento de dispositivos

Para habilitar o gerenciamento de dispositivos, certifique-se de que os seguintes uses-features sejam declarados:

  • android.software.device_admin
  • android.software.managed_users (o recurso é declarado se e somente se o dispositivo tiver pelo menos 2 GB de memória.)

Para confirmar que esses valores uses-feature foram declarados em um dispositivo, execute: adb shell pm list features .

Apenas aplicativos essenciais

Por padrão, apenas os aplicativos essenciais para a operação correta do perfil são habilitados como parte do provisionamento de um dispositivo gerenciado. Lembre-se de que todas as instâncias de exemplo de arquivos _managed_profile.xml abaixo são relevantes apenas se android.software.managed_users for declarado. Os OEMs devem garantir que o perfil ou dispositivo gerenciado tenha todos os aplicativos necessários modificando:

vendor_required_apps_managed_profile.xml
vendor_required_apps_managed_device.xml
vendor_disallowed_apps_managed_profile.xml
vendor_disallowed_apps_managed_device.xml
/*
 * The following are for Android 9 and higher only
 */
vendor_required_apps_managed_user.xml
vendor_disallowed_apps_managed_user.xml

Os aplicativos obrigatórios e não permitidos para usuários gerenciados são aplicados a usuários secundários criados por meio DevicePolicyManager#createAndManageUser .

Exemplos de um dispositivo Nexus

Android 8.xe anteriores

pacakages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_device.xml

Android 9 e superior

frameworks/base/core/res/res/values/vendor_required_apps_managed_device.xml
<resources>
  <!-- A list of apps to be retained on the managed device -->
  <string-array name="vendor_required_apps_managed_device">
    <item>com.android.vending</item> <!--­Google Play -->
    <item>com.google.android.gms</item> <!--­Required by Play -->
    <item>com.google.android.contacts</item> <!--­Google or OEM Contacts­-->
    <item>com.google.android.googlequicksearchbox</item> <!--­Google Launcher -->
    <item>com.google.android.launcher</item> <!--­Google Launcher or OEM Launcher -->
    <item>com.google.android.dialer</item> <!--­Google or OEM dialer to enable making phone calls -->
  </string-array>
</resources>

Android 8.xe anteriores

packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_profile.xml

Android 9 e superior

frameworks/base/core/res/res/values/vendor_required_apps_managed_profile.xml
<resources>
    <!-- A list of apps to be retained in the managed profile. This includes any Google experience apps required. -->
    <string-array name="vendor_required_apps_managed_profile">
        <item>com.android.vending</item> <!-- Google Play -->
        <item>com.google.android.gms</item> <!-- Required by Play -->
        <item>com.google.android.contacts</item> <!-- Google or OEM Contacts -->
    </string-array>
</resources>

Requisitos do iniciador

Você deve atualizar o Launcher para oferecer suporte a aplicativos de crachá com o crachá de ícone (fornecido no AOSP para representar os aplicativos gerenciados) e outros elementos da interface do usuário do crachá, como recentes e notificações. Se você usar o launcher3 no AOSP sem modificações, provavelmente já suporta esse recurso de emblema.

Requisitos NFC

Dispositivos com NFC devem habilitar NFC durante a experiência pronta para uso (ou seja, assistente de configuração) e ser configurados para aceitar intenções de provisionamento gerenciadas:

packages/apps/Nfc/res/values/provisioning.xml
<bool name="enable_nfc_provisioning">true</bool>
<item>application/com.android.managedprovisioning</item>

Requisitos de configuração

Os dispositivos que incluem uma experiência pronta para uso (ou seja, assistente de configuração) devem implementar o provisionamento do proprietário do dispositivo. Quando a experiência pronta para uso for aberta, ela deverá verificar se outro processo (como provisionamento do proprietário do dispositivo) já concluiu a configuração do usuário e, em caso afirmativo, deverá disparar uma intenção inicial e concluir a configuração. Essa intenção é capturada pelo aplicativo de provisionamento, que passa o controle para o proprietário do dispositivo recém-definido.

Para atender aos requisitos de configuração, adicione o seguinte código à atividade principal da configuração do dispositivo:

@Override
   protected void onStart() {
        super.onStart();

        // When returning to a setup wizard activity, check to see if another setup process
        // has intervened and, if so, complete an orderly exit
        boolean completed = Settings.Secure.getInt(getContentResolver(),
                Settings.Secure.USER_SETUP_COMPLETE, 0) != 0;
        if (completed) {
           startActivity(new Intent(Intent.ACTION_MAIN, null)
                .addCategory(Intent.CATEGORY_HOME)
                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                        | Intent.FLAG_ACTIVITY_CLEAR_TASK
                        | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED));
           finish();
       }

       ...
   }