Wdrażanie zarządzania urządzeniami

W tej sekcji opisano, jak włączyć i zweryfikować funkcje zarządzania urządzeniami wymagane do przygotowania urządzeń do obsługi profili zarządzanych. Obejmuje również przypadki użytkowników właścicieli urządzeń, które są niezbędne w środowisku korporacyjnym.

Oprócz kodu AOSP urządzenie wymaga następujących składników do działania z profilami zarządzanymi.

Ogólne wymagania

Urządzenia przeznaczone do obsługi zarządzania urządzeniami muszą spełniać następujące wymagania ogólne.

Termiczne wartości HAL

Android 7.0 i nowsze obejmują obsługę interfejsu API HardwarePropertiesManager, interfejsu API monitorowania urządzeń i raportowania o kondycji, który umożliwia aplikacjom wysyłanie zapytań o stan sprzętu urządzenia. Ten interfejs API jest udostępniany za pośrednictwem android.os.HardwarePropertiesManager i wykonuje wywołania za pośrednictwem HardwarePropertiesManagerService do sprzętowej warstwy termicznej ( hardware/libhardware/include/hardware/thermal.h ). Jest to chroniony interfejs API, co oznacza, że ​​​​tylko aplikacje kontrolera zasad urządzenia (DPC) właściciela urządzenia/profilu i bieżąca VrListenerService mogą go wywoływać.

Aby obsługiwać interfejs HardwarePropertiesManager API, implementacja termicznej warstwy HAL urządzenia musi być w stanie zgłaszać następujące wartości:

Wartość Skala raportowania Umożliwia
Temperatura [procesora|GPU|baterii|skóry urządzenia] Temperatura elementu w stopniach Celsjusza Aplikacje mogą sprawdzać temperatury urządzeń i temperatury dławienia/wyłączania komponentów
Aktywność procesora/całkowita liczba włączonych czasów Czas w milisekundach Aplikacje mogą sprawdzać użycie procesora na rdzeń
Prędkość wiatraka RPM Aplikacje mogą sprawdzać prędkość wentylatora

Implementacje powinny poprawnie obsługiwać sytuacje raportowania wartości, gdy rdzeń (lub GPU, bateria, wentylator) przechodzi w tryb offline lub jest podłączony/odłączony.

Włączanie zarządzania urządzeniami

Aby włączyć zarządzanie urządzeniami, upewnij się, że zadeklarowane są następujące uses-features :

  • android.software.device_admin
  • android.software.managed_users (funkcja jest deklarowana wtedy i tylko wtedy, gdy urządzenie ma co najmniej 2 GB pamięci).

Aby potwierdzić, że te wartości uses-feature zostały zadeklarowane na urządzeniu, uruchom: adb shell pm list features .

Tylko podstawowe aplikacje

Domyślnie w ramach aprowizacji zarządzanego urządzenia włączone są tylko aplikacje niezbędne do prawidłowego działania profilu. Pamiętaj, że wszystkie przykładowe wystąpienia plików _managed_profile.xml poniżej są istotne tylko wtedy, gdy zadeklarowano android.software.managed_users . Producenci OEM muszą upewnić się, że zarządzany profil lub urządzenie ma wszystkie wymagane aplikacje, modyfikując:

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

Aplikacje wymagane i niedozwolone dla zarządzanych użytkowników są stosowane do użytkowników pomocniczych utworzonych za pomocą DevicePolicyManager#createAndManageUser .

Przykłady z urządzenia Nexus

Android 8.x i starsze

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

Android 9 i nowszy

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 i wcześniejsze

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

Android 9 i nowszy

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>

Wymagania dotyczące Launchera

Należy zaktualizować program uruchamiający, aby obsługiwał aplikacje do oznaczania plakietek z ikoną (udostępnianą w AOSP w celu reprezentowania zarządzanych aplikacji) oraz innymi elementami interfejsu użytkownika plakietki, takimi jak ostatnie i powiadomienia. Jeśli używasz launchera3 w AOSP bez modyfikacji, prawdopodobnie już obsługujesz tę funkcję oznaczania.

Wymagania NFC

Urządzenia z funkcją NFC muszą włączyć NFC podczas działania od razu po wyjęciu z pudełka (tj. kreatora konfiguracji) i być skonfigurowane do akceptowania intencji zarządzanej aprowizacji:

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

Wymagania instalacyjne

Urządzenia, które zawierają standardowe środowisko (tj. kreator konfiguracji), powinny zaimplementować obsługę administracyjną właściciela urządzenia. Po otwarciu środowiska out-of-box należy sprawdzić, czy inny proces (np. obsługa administracyjna właściciela urządzenia) zakończyła już konfigurację użytkownika, a jeśli tak, powinien uruchomić intencję domową i zakończyć konfigurację. Ta intencja jest przechwytywana przez aplikację do obsługi administracyjnej, która następnie przekazuje kontrolę nowo skonfigurowanemu właścicielowi urządzenia.

Aby spełnić wymagania konfiguracji, dodaj następujący kod do głównego działania konfiguracji urządzenia:

@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();
       }

       ...
   }