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