Implementación de la gestión de dispositivos

Esta sección describe cómo habilitar y validar las funciones de administración de dispositivos requeridas para preparar dispositivos para perfiles administrados. También cubre casos de usuarios de propietarios de dispositivos que son esenciales en un entorno corporativo.

Además del código AOSP, un dispositivo requiere los siguientes componentes para funcionar con perfiles administrados.

Requerimientos generales

Los dispositivos destinados a admitir la administración de dispositivos deben cumplir los siguientes requisitos generales.

Valores HAL térmicos

Android 7.0 y versiones posteriores incluyen soporte para la API de HardwarePropertiesManager, una API de informes de salud y monitoreo de dispositivos que permite que las aplicaciones consulten el estado del hardware del dispositivo. Esta API se expone a través de android.os.HardwarePropertiesManager y realiza llamadas a través de HardwarePropertiesManagerService a la HAL térmica de hardware ( hardware/libhardware/include/hardware/thermal.h ). Es una API protegida, lo que significa que solo las aplicaciones del controlador de políticas de dispositivo (DPC) del propietario del dispositivo/perfil y el VrListenerService actual pueden llamarla.

Para admitir la API de HardwarePropertiesManager, la implementación de HAL térmica del dispositivo debe poder informar los siguientes valores:

Valor Escala de informes Habilita
Temperatura de [CPU|GPU|Batería|Piel del dispositivo] Temperatura del componente en grados Celsius Las aplicaciones pueden verificar las temperaturas del dispositivo y las temperaturas de aceleración/apagado de los componentes
CPU activa/total de tiempos habilitados Tiempo en milisegundos Las aplicaciones pueden verificar el uso de la CPU por núcleo
Velocidad del ventilador RPM Las aplicaciones pueden comprobar la velocidad del ventilador

Las implementaciones deben manejar correctamente las situaciones de valores de informes cuando un núcleo (o GPU, batería, ventilador) se desconecta o se conecta/desconecta.

Habilitación de la administración de dispositivos

Para habilitar la administración de dispositivos, asegúrese de que se declaren los siguientes uses-features :

  • android.software.device_admin
  • android.software.managed_users (la característica se declara si y solo si el dispositivo tiene al menos 2 GB de memoria).

Para confirmar que estos valores uses-feature se hayan declarado en un dispositivo, ejecute: adb shell pm list features .

Solo aplicaciones esenciales

De manera predeterminada, solo las aplicaciones esenciales para el correcto funcionamiento del perfil están habilitadas como parte del aprovisionamiento de un dispositivo administrado. Tenga en cuenta que todas las instancias de ejemplo de los archivos _managed_profile.xml a continuación solo son relevantes si se declara android.software.managed_users . Los OEM deben asegurarse de que el perfil o dispositivo administrado tenga todas las aplicaciones requeridas 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

Las aplicaciones requeridas y no permitidas para usuarios administrados se aplican a usuarios secundarios creados mediante DevicePolicyManager#createAndManageUser .

Ejemplos de un dispositivo Nexus

Android 8.x y anteriores

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

Android 9 y 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 y anteriores

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

Android 9 y 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 del lanzador

Debe actualizar el Iniciador para que admita aplicaciones de credencialización con el icono de credencial (proporcionado en AOSP para representar las aplicaciones administradas) y otros elementos de la interfaz de usuario de credencial, como recientes y notificaciones. Si usa launcher3 en AOSP sin modificaciones, es probable que ya admita esta función de credencialización.

Requisitos NFC

Los dispositivos con NFC deben habilitar NFC durante la experiencia lista para usar (es decir, el asistente de configuración) y estar configurados para aceptar intentos de aprovisionamiento administrado:

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

Requisitos de configuración

Los dispositivos que incluyen una experiencia lista para usar (es decir, asistente de configuración) deben implementar el aprovisionamiento del propietario del dispositivo. Cuando se abre la experiencia lista para usar, debe verificar si otro proceso (como el aprovisionamiento del propietario del dispositivo) ya finalizó la configuración del usuario y, de ser así, debe activar una intención de inicio y finalizar la configuración. Esta intención es captada por la aplicación de aprovisionamiento, que luego entrega el control al propietario del dispositivo recién configurado.

Para cumplir con los requisitos de configuración, agregue el siguiente código a la actividad principal de configuración del 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();
       }

       ...
   }