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, kann mit einer Zulassungsliste angeben, welche Systempakete vorinstalliert werden sollen für jede Art von Nutzenden. Wenn Sie nicht benötigte Systempakete nicht vorinstallieren, können Sie die Erstellungs-, Start- und Speichernutzungszeiten von Nutzern 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 ein Eintrag in einer XML-Datei (mit dem Manifestnamen codiert), mit Ausnahme von statischen Overlays, die stattdessen automatisch gemäß dem Eintrag für ihre Overlay-Zielpaket. 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 Elemente wird in den frameworks/base/core/java/android/content/pm/UserInfo.java

Detailliertere Kontrolle ist möglich, wenn Sie einzelne Nutzertypen angeben, Jeder Nutzer entspricht genau einem dieser Nutzertypen, einschließlich der AOSP-Nutzertypen definiert in frameworks/base/core/java/android/os/UserManager.java und alle benutzerdefinierten OEM-Nutzertypen, frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java. Weitere Informationen finden Sie auf der Seite Nutzertypen. Informationen. Derzeit umfassen 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.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. Für ein Systempaket, das auf allen menschlichen Nutzern mit Ausnahme von Profilnutzern vorinstalliert wird. Dies könnte beispielsweise auf eine Hintergrund-App angewendet werden:
    <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. Detailliertere Optionen sind auch verfügbar, wenn Sie einzelne Nutzer angeben Typen. 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 config_userTypePackageWhitelistMode der Konfigurationsressource 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, wenn Sie 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 Zulassungslistendatei aufgeführt sind, als implizit auf die Zulassungsliste gesetzt werden nur für SYSTEM-Nutzer.

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>