Implementieren der Geräteverwaltung

In diesem Abschnitt wird beschrieben, wie Sie Geräteverwaltungsfunktionen aktivieren und validieren, die zum Vorbereiten von Geräten für verwaltete Profile erforderlich sind. Es deckt auch Anwendungsfälle von Gerätebesitzern ab, die in einer Unternehmensumgebung unerlässlich sind.

Zusätzlich zum AOSP-Code benötigt ein Gerät die folgenden Komponenten, um mit verwalteten Profilen zu funktionieren.

Allgemeine Anforderungen

Geräte, die die Geräteverwaltung unterstützen sollen, müssen die folgenden allgemeinen Anforderungen erfüllen.

Thermische HAL-Werte

Android 7.0 und höher bietet Unterstützung für die HardwarePropertiesManager API, eine API für Geräteüberwachung und Integritätsberichte, mit der Anwendungen den Zustand der Gerätehardware abfragen können. Diese API wird über freiliegende android.os.HardwarePropertiesManager und macht Anrufe über HardwarePropertiesManagerService auf die Hardware thermische HAL ( hardware/libhardware/include/hardware/thermal.h ). Es ist eine geschützte API, nur Gerät / Profilinhaber Device Policy Controller (DPC) Anwendungen und die aktuelle Bedeutung VrListenerService so nennen kann.

Zur Unterstützung der HardwarePropertiesManager-API muss die thermische HAL-Implementierung des Geräts in der Lage sein, die folgenden Werte zu melden:

Wert Berichtsskala Aktiviert
Temperatur von [CPU|GPU|Akku|Geräte-Skin] Bauteiltemperatur in Grad Celsius Apps können Gerätetemperaturen und Komponenten-Throttling-/Shutdown-Temperaturen überprüfen
CPU-Aktiv/Gesamt aktivierte Zeiten Zeit in Millisekunden Apps können die CPU-Auslastung pro Kern überprüfen
Lüftergeschwindigkeit Drehzahl Apps können die Lüftergeschwindigkeit überprüfen

Implementierungen sollten Berichtswerte-Situationen korrekt verarbeiten, wenn ein Kern (oder GPU, Akku, Lüfter) offline geht oder angeschlossen/ausgesteckt wird.

Geräteverwaltung aktivieren

Um die Geräteverwaltung zu ermöglichen, gewährleisten die folgenden uses-features deklariert werden:

  • android.software.device_admin
  • android.software.managed_users (Funktion wird erklärt , wenn und nur wenn das Gerät mindestens 2 GB Speicher.)

Um zu bestätigen , diese uses-feature haben Werte auf einem Gerät deklariert worden ist , laufen: adb shell pm list features .

Nur wichtige Apps

Standardmäßig werden im Rahmen der Bereitstellung eines verwalteten Geräts nur Anwendungen aktiviert, die für den ordnungsgemäßen Betrieb des Profils erforderlich sind. Denken Sie daran, alle Beispiele Instanzen _managed_profile.xml Dateien sind unten nur relevant , wenn android.software.managed_users deklariert wird. OEMs müssen sicherstellen, dass das verwaltete Profil oder Gerät über alle erforderlichen Anwendungen verfügt, indem sie Folgendes ändern:

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

Erforderlich und nicht erlaubt Anwendungen für verwaltete Benutzer werden an sekundären Benutzer angewendet über erstellt DevicePolicyManager#createAndManageUser .

Beispiele von einem Nexus-Gerät

Android 8.x und früher

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

Android 9 und höher

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 und früher

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

Android 9 und höher

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>

Launcher-Anforderungen

Sie müssen den Launcher aktualisieren, um Badging-Anwendungen mit dem Symbol-Badge (in AOSP bereitgestellt, um die verwalteten Anwendungen darzustellen) und anderen Badge-Benutzeroberflächenelementen wie z. Wenn Sie launcher3 ohne Änderungen in AOSP, dann wahrscheinlich unterstützen Sie bereits diese Badging Funktion.

NFC-Anforderungen

Geräte mit NFC müssen NFC während der Out-of-the-Box-Erfahrung (dh Einrichtungsassistent) aktivieren und so konfiguriert sein, dass sie verwaltete Bereitstellungsabsichten akzeptieren:

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

Einrichtungsanforderungen

Geräte, die eine Out-of-Box-Erfahrung (dh Einrichtungsassistent) beinhalten, sollten die Bereitstellung durch den Gerätebesitzer implementieren. Wenn die Out-of-Box-Erfahrung geöffnet wird, sollte überprüft werden, ob ein anderer Prozess (z. Diese Absicht wird von der Bereitstellungsanwendung erfasst, die dann die Kontrolle an den neu eingestellten Gerätebesitzer übergibt.

Um die Setup-Anforderungen zu erfüllen, fügen Sie den folgenden Code zur Hauptaktivität des Geräte-Setups hinzu:

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

       ...
   }