Android unterstützt mehrere Nutzer auf einem einzigen Gerät. Weitere Informationen finden Sie unter Mehrere Nutzer unterstützen. Da nicht alle Systempakete für alle Arten von Android-Nutzern nützlich sind, können Sie mit einer Zulassungsliste angeben, welche Systempakete für jeden Nutzertyp vorinstalliert werden sollen. Wenn Sie keine unnötigen Systempakete vorinstallieren, können Sie die Erstellungs-, Start- und Speichernutzungszeiten für Nutzer optimieren.
Verwenden Sie XML-Dateien für die Systemkonfiguration, die auf frameworks/base/data/etc/preinstalled-packages-platform.xml
basieren, um anzugeben, welche Systempakete für neue Nutzer basierend auf ihrem Nutzertyp zuerst installiert werden sollen. Alle Systempakete auf dem Gerät sollten idealerweise einen Eintrag in einer XML-Datei haben (sortiert nach Manifestnamen), mit Ausnahme von statischen Overlays. Diese werden stattdessen automatisch gemäß dem Eintrag für das entsprechende Overlay-Zielpaket behandelt.
Wie das Gerät mit Systempaketen umgehen soll, die hier nicht aufgeführt sind, wird durch den Konfigurationsmodus gesteuert.
Nutzertypen
Basisnutzertypen (jeder Nutzer ist mindestens einer dieser Typen):
Nutzertyp | Beschreibung |
---|---|
SYSTEM |
Nutzer 0 |
FULL |
Alle Nutzer ohne Profil. |
PROFILE |
Ein Profil für einen menschlichen Nutzer. |
Die genaue Bedeutung der einzelnen Status wird unter frameworks/base/core/java/android/content/pm/UserInfo.java
definiert.
Eine detailliertere Steuerung ist möglich, wenn Sie einzelne Nutzertypen angeben, da jeder Nutzer genau einem dieser Nutzertypen zugewiesen ist. Dazu gehören die in frameworks/base/core/java/android/os/UserManager.java
definierten AOSP-Nutzertypen und alle benutzerdefinierten OEM-Nutzertypen, die in frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java.
definiert sind. Weitere Informationen finden Sie auf der Seite Nutzertypen.
Derzeit gibt es folgende AOSP-Nutzertypen:
android.os.usertype.full.SYSTEM
android.os.usertype.full.SECONDARY
android.os.usertype.full.GUEST
android.os.usertype.full.DEMO
android.os.usertype.full.RESTRICTED
android.os.usertype.profile.MANAGED
android.os.usertype.profile.PRIVATE
android.os.usertype.system.HEADLESS
Beispiele
Die folgenden Beispiele beziehen sich auf die häufigsten Anwendungsfälle:
- So sorgen Sie dafür, dass ein Systempaket nur für Nutzer 0 vorinstalliert wird:
<install-in-user-type package="com.android.example"> <install-in user-type="SYSTEM" /> </install-in-user-type>
- Damit ein Systempaket für alle Nutzer (z. B. ein Webbrowser) vorinstalliert wird, d. h. für alle Nutzer vom Typ
FULL
oderPROFILE
, die alle Nutzer ansprechen:<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> <install-in user-type="PROFILE" /> </install-in-user-type>
- Ein Systempaket soll für alle Nutzer außer Profilnutzer vorinstalliert werden.
Dies könnte beispielsweise für eine Hintergrund-App gelten:
<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> </install-in-user-type>
- Einige Systempakete müssen wirklich für alle Nutzer verfügbar sein, unabhängig vom Nutzertyp. Verwenden Sie in diesen Fällen Folgendes:
<install-in-user-type package="com.android.example"> <install-in user-type="SYSTEM"> <install-in user-type="FULL" /> <install-in user-type="PROFILE" /> </install-in-user-type>
- Wenn Sie einzelne Nutzertypen angeben, sind auch detailliertere Optionen verfügbar. Im folgenden Beispielcode wird dieses Paket beispielsweise auf allen Nutzern installiert, deren Nutzertyp ein verwaltetes Profil oder ein Gast ist oder die einen
SYSTEM
-Basistyp haben.<install-in-user-type package="com.android.example"> <install-in user-type="android.os.usertype.profile.MANAGED" /> <install-in user-type="android.os.usertype.full.GUEST" /> <install-in user-type="SYSTEM"> </install-in-user-type>
Tag „do-not-install-in“
Mit dem do-not-install-in
-Tag lässt sich auch verhindern, dass Pakete für bestimmte Nutzertypen vorinstalliert werden. do-not-install-in
-Tags überschreiben install-in
-Tags in jeder Datei. Beispiel:
<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> <do-not-install-in user-type="android.os.usertype.full.GUEST"/> </install-in-user-type>
android.os.usertype.full.GUEST
ist (ein Untertyp von FULL), wird dieses Paket nicht installiert, da das do-not-install-in
-Tag Vorrang vor install-in
hat.
Verhalten mit config.xml steuern
Der Wert der Konfigurationsressource config_userTypePackageWhitelistMode
steuert diese Funktion und bestimmt, wie ein Gerät Systempakete interpretiert, die keinen Eintrag für einen Nutzertyp haben. Weitere Informationen finden Sie unter frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode
.
Legen Sie in frameworks/base/core/res/res/values/config.xml
die Ganzzahl mit dem Namen config_userTypePackageWhitelistMode
auf eine Kombination der folgenden Werte fest. Diese Flags können kombiniert werden. Die wichtigsten Flags sind:
Wert | Beschreibung |
---|---|
0 (0b0000) |
Deaktivieren Installieren Sie alle Systempakete. |
1 (0b0001) |
Erzwingen Installieren Sie nur Systempakete, die auf der Zulassungsliste stehen. |
4 (0b0100) |
Pakete, die nicht in der Zulassungsliste erwähnt werden, gelten als implizit auf der Zulassungsliste. |
8 (0b1000) |
Alle Pakete, die nicht in der Zulassungsliste aufgeführt sind, gelten implizit als für den SYSTEM-Nutzer zugelassen. |
Mit der folgenden Konfiguration wird die Funktion aktiviert (damit die Tags install-in
und do-not-install-in
befolgt werden), aber alle nicht genannten Systempakete werden für alle Nutzer als install-in
behandelt:
<integer name="config_userTypePackageWhitelistMode">5</integer>