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 cobre casos de usuários proprietários de dispositivos 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 HardwarePropertiesManager API, uma API de monitoramento de dispositivos e relatórios de integridade que permite que os aplicativos consultem o estado do hardware do dispositivo. Esta API é exposta através android.os.HardwarePropertiesManager
e faz chamadas através HardwarePropertiesManagerService
ao HAL hardware térmica ( hardware/libhardware/include/hardware/thermal.h
). É uma API protegida, ou seja, aplicações único dispositivo / profile proprietário do dispositivo Policy Controller (DPC) e da corrente VrListenerService
pode chamá-lo.
Para oferecer suporte à API HardwarePropertiesManager, a implementação de HAL térmica do dispositivo deve ser capaz de relatar os seguintes valores:
Valor | Escala de Relatório | Possibilita |
---|---|---|
Temperatura de [CPU | GPU | Bateria | Pele do dispositivo] | Temperatura do componente em graus Celsius | Os aplicativos podem verificar as temperaturas do dispositivo e as temperaturas de limitação / desligamento dos componentes |
CPU ativa / tempo total habilitado | 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, ventilador) fica offline ou é conectado / desconectado.
Habilitando o gerenciamento de dispositivos
Para ativar o gerenciamento de dispositivos, certifique-se os seguintes uses-features
são declaradas:
-
android.software.device_admin
-
android.software.managed_users
(recurso é declarado se e somente se o dispositivo tem pelo menos 2 GB de memória.)
Para confirmar estes uses-feature
valores foram declarados em um dispositivo, execute: adb shell pm list features
.
Apps essenciais apenas
Por padrão, apenas os aplicativos essenciais para a operação correta do perfil são ativados como parte do provisionamento de um dispositivo gerenciado. Tenha em mente, todas as instâncias exemplo de _managed_profile.xml
arquivos abaixo são apenas relevante se android.software.managed_users
é declarada. 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
Aplicativos necessários e não permitidos para usuários gerenciados são aplicadas a usuários secundários criados via DevicePolicyManager#createAndManageUser
.
Exemplos de um dispositivo Nexus
Android 8.x e anterior
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.x e anterior
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 lançador
Você deve atualizar o Launcher para suportar aplicativos de crachá com o emblema do ícone (fornecido no AOSP para representar os aplicativos gerenciados) e outros elementos da interface do usuário do emblema, como recentes e notificações. Se você usar launcher3 em AOSP sem modificações, então você provavelmente já suportam esta funcionalidade badging.
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 intents de provisionamento gerenciado:
packages/apps/Nfc/res/values/provisioning.xml
<bool name="enable_nfc_provisioning">true</bool> <item>application/com.android.managedprovisioning</item>
Requisitos de configuração
Dispositivos que incluem uma experiência pronta para uso (isto é, assistente de configuração) devem implementar o provisionamento do proprietário do dispositivo. Quando a experiência pronta para uso é aberta, ela deve verificar se outro processo (como o provisionamento do proprietário do dispositivo) já concluiu a configuração do usuário e, em caso afirmativo, deve disparar uma intenção inicial e finalizar a configuração. Essa intenção é capturada pelo aplicativo de provisionamento, que então passa o controle para o proprietário do dispositivo recém-configurado.
Para atender aos requisitos de configuração, adicione o seguinte código à atividade principal de 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(); } ... }