Vorinstallierte Systempakete

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:

  1. 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>
  2. Damit ein Systempaket für alle Nutzer (z. B. ein Webbrowser) vorinstalliert wird, d. h. für alle Nutzer vom Typ FULL oder PROFILE, 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>
  3. 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>
  4. 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>
  5. 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>
Wenn ein Nutzer vom Typ 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>