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 Benutzerfä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 enthält Unterstützung für die HardwarePropertiesManager-API, eine Geräteüberwachungs- und Integritätsberichts-API, mit der Anwendungen den Zustand der Gerätehardware abfragen können. Diese API wird über android.os.HardwarePropertiesManager und ruft über HardwarePropertiesManagerService die thermische HAL der Hardware ( hardware/libhardware/include/hardware/thermal.h ) auf. Es handelt sich um eine geschützte API, d. h. nur Geräte-/Profileigentümer Device Policy Controller (DPC)-Anwendungen und der aktuelle VrListenerService können sie aufrufen.

Um die HardwarePropertiesManager-API zu unterstützen, muss die thermische HAL-Implementierung des Geräts in der Lage sein, die folgenden Werte zu melden:

Wert Berichtsskala Ermöglicht
Temperatur von [CPU|GPU|Akku|Geräte-Skin] Bauteiltemperatur in Grad Celsius Apps können Gerätetemperaturen und Komponentendrosselungs-/Abschalttemperaturen überprüfen
CPU aktive/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 Situationen mit Berichtswerten korrekt handhaben, wenn ein Kern (oder GPU, Akku, Lüfter) offline geht oder eingesteckt/ausgesteckt wird.

Geräteverwaltung aktivieren

Um die Geräteverwaltung zu aktivieren, stellen Sie sicher, dass die folgenden uses-features deklariert sind:

  • android.software.device_admin
  • android.software.managed_users (Funktion wird deklariert, wenn und nur wenn das Gerät über mindestens 2 GB Speicher verfügt.)

Um zu bestätigen, dass diese uses-feature Werte auf einem Gerät deklariert wurden, führen Sie Folgendes aus: 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 korrekten Betrieb des Profils erforderlich sind. Beachten Sie, dass alle Beispielinstanzen von _managed_profile.xml Dateien unten nur relevant sind, wenn android.software.managed_users deklariert ist. 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

Erforderliche und unzulässige Apps für verwaltete Benutzer werden auf sekundäre Benutzer angewendet, die über 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 das Kennzeichnen von Anwendungen mit dem Symbol-Badge (in AOSP bereitgestellt, um die verwalteten Anwendungen darzustellen) und anderen Badge-Elementen der Benutzeroberfläche, wie z. B. Aktuelles und Benachrichtigungen, zu unterstützen. Wenn Sie Launcher3 in AOSP ohne Änderungen verwenden, unterstützen Sie diese Badging-Funktion wahrscheinlich bereits.

NFC-Anforderungen

Geräte mit NFC müssen NFC während der Out-of-the-Box-Erfahrung (d. h. Setup-Assistent) aktivieren und so konfiguriert sein, dass verwaltete Bereitstellungsabsichten akzeptiert werden:

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

Setup-Anforderungen

Geräte, die eine Out-of-Box-Erfahrung (dh einen Einrichtungsassistenten) enthalten, sollten eine Gerätebesitzer-Bereitstellung implementieren. Wenn die Out-of-Box-Erfahrung geöffnet wird, sollte sie überprüfen, ob ein anderer Prozess (z. B. die Bereitstellung von Gerätebesitzern) die Benutzereinrichtung bereits abgeschlossen hat, und wenn dies der Fall ist, sollte sie eine Home-Intent auslösen und die Einrichtung abschließen. Diese Absicht wird von der Bereitstellungsanwendung erfasst, die dann die Kontrolle an den neu festgelegten Geräteeigentümer ü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();
       }

       ...
   }