Vorinstallierte Systempakete

Android unterstützt die Nutzung mehrerer Benutzer auf einem einzigen Gerät. Weitere Informationen finden Sie unter Unterstützung mehrerer Benutzer . Da nicht alle Systempakete für alle Arten von Android-Benutzern nützlich sind, können Sie mithilfe einer Zulassungsliste angeben, welche Systempakete für die einzelnen Benutzertypen vorinstalliert werden sollen. Indem Sie unnötige Systempakete nicht vorinstallieren, können Sie Benutzererstellungszeiten, Startzeiten und Speichernutzung optimieren.

Verwenden Sie XML-Systemkonfigurationsdateien nach dem Vorbild frameworks/base/data/etc/preinstalled-packages-platform.xml , um zu deklarieren, welche Systempakete für neue Benutzer basierend auf ihrem Benutzertyp zunächst installiert werden sollen. Alle Systempakete auf dem Gerät sollten idealerweise einen Eintrag in einer XML-Datei haben (verschlüsselt durch ihren Manifestnamen), mit Ausnahme statischer Overlays, die stattdessen automatisch entsprechend dem Eintrag für ihr entsprechendes Overlay-Zielpaket behandelt werden. Die Art und Weise, wie das Gerät mit Systempaketen umgehen soll, die hier nicht aufgeführt sind, wird durch den Konfigurationsmodus gesteuert.

Benutzertypen

Basisbenutzertypen (jeder Benutzer wird mindestens einer dieser Typen sein) sind:

Benutzertyp Beschreibung
SYSTEM Benutzer 0.
FULL Jeder menschliche Benutzer ohne Profil.
PROFILE Ein menschlicher Profilbenutzer.

Die genaue Bedeutung jedes einzelnen ist in frameworks/base/core/java/android/content/pm/UserInfo.java definiert.

Eine detailliertere Kontrolle kann durch die Angabe einzelner Benutzertypen erreicht werden, da jeder Benutzer genau einer dieser Benutzertypen ist, einschließlich der in frameworks/base/core/java/android/os/UserManager.java definierten AOSP-Benutzertypen und aller benutzerdefinierten OEM-Benutzer Typen, die in frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java. Weitere Informationen finden Sie auf der Seite Benutzertypen . Zu den AOSP-Benutzertypen gehören derzeit:

  • 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 befassen sich mit den häufigsten Anwendungsfällen:

  1. Für ein Systempaket, das nur in Benutzer 0 vorinstalliert werden soll:
    <install-in-user-type package="com.android.example">
        <install-in user-type="SYSTEM" />
     </install-in-user-type>
    
  2. Damit ein Systempaket auf allen menschlichen Benutzern (z. B. einem Webbrowser) vorinstalliert wird, d. h. auf jedem Benutzer vom Typ FULL oder PROFILE installiert wird, der alle menschlichen Benutzer anspricht:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
        <install-in user-type="PROFILE" />
    </install-in-user-type>
    
  3. Damit ein Systempaket auf allen menschlichen Benutzern mit Ausnahme von Profilbenutzern 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 Benutzer verfügbar sein, unabhängig vom Typ. Verwenden Sie in diesen Fällen:
    <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. Durch die Angabe einzelner Benutzertypen sind auch detailliertere Optionen verfügbar. Der folgende Beispielcode installiert dieses Paket beispielsweise auf jedem Benutzer, dessen Benutzertyp ein verwaltetes Profil oder ein Gast ist oder vom Basistyp SYSTEM ist.
    <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>
    

Do-not-install-in-Tag

Mit dem Tag do-not-install-in kann auch verhindert werden, dass Pakete für bestimmte Benutzertypen vorinstalliert werden. Beachten Sie, dass do-not-install-in “-Tags install-in -Tags in jeder Datei überschreiben. Zum 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 Benutzer vom Typ android.os.usertype.full.GUEST (ein Untertyp von FULL) ist, wird dieses Paket nicht installiert, da das Tag do-not-install-in Vorrang vor dem Tag install-in hat.

Verhalten mit config.xml steuern

Der Konfigurationsressourcenwert config_userTypePackageWhitelistMode steuert diese Funktion und bestimmt, wie ein Gerät Systempakete interpretiert, die für keinen Benutzertyp einen Eintrag haben. Weitere Informationen finden Sie 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 Systempakete nur, wenn sie auf der Zulassungsliste stehen.
4 (0b0100) Betrachten Sie jedes Paket, das nicht in der Zulassungslistendatei erwähnt wird, als implizit auf der Zulassungsliste.
8 (0b1000) Betrachten Sie jedes Paket, das nicht in der Zulassungslistendatei erwähnt wird, als implizit nur für den SYSTEM-Benutzer auf der Zulassungsliste.

Die folgende Konfiguration aktiviert die Funktion (so dass die Tags install-in und do-not-install-in befolgt werden), behandelt jedoch alle nicht erwähnten Systempakete so, als wären sie für alle Benutzer install-in :

<integer name="config_userTypePackageWhitelistMode">5</integer>