Wstępnie zainstalowane pakiety systemowe

Android obsługuje wielu użytkowników na jednym urządzeniu. Aby dowiedzieć się więcej, Więcej informacji znajdziesz w artykule Obsługa wielu użytkowników. Nie wszystkie pakiety systemowe są przydatne dla wszystkich użytkowników Androida, więc może użyć listy dozwolonych, aby określić, które pakiety systemowe powinny być wstępnie zainstalowane dla każdego typu użytkownika. Nie instalowanie z góry niepotrzebnych pakietów systemowych pozwala zoptymalizować czas tworzenia i uruchamiania użytkownika oraz wykorzystanie pamięci.

Użyj plików XML konfiguracji systemu, które są modelowane na podstawie pliku frameworks/base/data/etc/preinstalled-packages-platform.xml, aby określić, które pakiety systemowe powinny być początkowo instalowane dla nowych użytkowników na podstawie ich typu. Idealnie, gdy wszystkie pakiety systemowe na urządzeniu wpis w pliku XML (z zapisanym kluczem jego nazwy manifestu), z wyjątkiem nakładek statycznych które są traktowane automatycznie na podstawie wpisu odpowiadającego pakietu docelowego nakładki. Sposób, w jaki urządzenie powinien obsługiwać pakiety systemowe, których nie ma na tej liście, jest kontrolowane przez tryb konfiguracji.

Typy użytkowników

Podstawowe typy użytkowników (każdy użytkownik należy do co najmniej jednego z tych typów):

Typ użytkownika Opis
SYSTEM Użytkownik 0.
FULL Każdy użytkownik, który nie jest profilem.
PROFILE Użytkownik profilu.

Dokładne znaczenie każdego słowa kluczowego jest zdefiniowane w frameworks/base/core/java/android/content/pm/UserInfo.java

Aby uzyskać bardziej szczegółową kontrolę, możesz określić poszczególne typy użytkowników, ponieważ każdy użytkownik jest dokładnie jednym z tych typów, w tym typów użytkowników AOSP zdefiniowanych w frameworks/base/core/java/android/os/UserManager.javaoraz typów użytkowników niestandardowych OEM zdefiniowanych w frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java.. Więcej informacji znajdziesz na stronie Typy użytkowników. Obecnie typy użytkowników AOSP to:

  • 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

Przykłady

Poniżej znajdziesz przykłady dotyczące najczęstszych przypadków użycia:

  1. Aby pakiet systemowy mógł być wstępnie zainstalowany tylko na koncie użytkownika 0:
    <install-in-user-type package="com.android.example">
        <install-in user-type="SYSTEM" />
     </install-in-user-type>
  2. Aby pakiet systemowy był fabrycznie zainstalowany u wszystkich użytkowników (np. przeglądarki internetowej), czyli zainstalowany u dowolnego użytkownika typu FULL lub PROFILE, który obejmuje wszystkich użytkowników:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
        <install-in user-type="PROFILE" />
    </install-in-user-type>
  3. pakiet systemowy powinien być wstępnie zainstalowany na wszystkich użytkownikach, z wyjątkiem użytkowników profilu; Możesz na przykład zastosować tę funkcję w aplikacji do ustawiania tapet:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
    </install-in-user-type>
  4. Niektóre pakiety systemowe rzeczywiście muszą być dostępne u wszystkich użytkowników, niezależnie od typu. W takim przypadku użyj:
    <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. Dostępne są też bardziej szczegółowe opcje, określając indywidualne użytkownika . Na przykład podany niżej przykładowy kod instaluje ten pakiet u dowolnego użytkownika, którego typ to profil zarządzany lub użytkownik gościnny albo typ SYSTEMpodstawowy.
    <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 nie-instalować-in

Można też uniemożliwić wstępne instalowanie pakietów u określonych typów użytkowników za pomocą tagu do-not-install-in. Pamiętaj, że tagi do-not-install-in zastępują tagi install-in w dowolnym pliku. Na przykład:

<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>
Jeśli użytkownik jest typu android.os.usertype.full.GUEST (podtyp FULL): ten pakiet nie jest zainstalowany, ponieważ do-not-install-in ma pierwszeństwo przed tagiem install-in.

Kontrolowanie zachowania za pomocą pliku config.xml

Wartość zasobu konfiguracji config_userTypePackageWhitelistModesteruje tą funkcją i określa, jak urządzenie interpretuje pakiety systemowe, które nie mają wpisu dla żadnego typu użytkownika. Więcej informacji: frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode

W polu frameworks/base/core/res/res/values/config.xml ustaw liczbę całkowitą. nazwany config_userTypePackageWhitelistMode do kombinacji następujące wartości. Te flagi można połączyć. Najważniejsze flagi to:

Wartość Opis
0 (0b0000) Wyłącz. Zainstaluj wszystkie pakiety systemowe.
1 (0b0001) Wymuś. Instaluj pakiety systemowe tylko wtedy, gdy znajdują się na liście dozwolonych.
4 (0b0100) Każdy pakiet niewymieniony w pliku listy dozwolonych należy traktować jako domyślnie dodany do listy dozwolonych.
8 (0b1000) Uważaj każdy pakiet, który nie jest wymieniony w pliku z listą dozwolonych, za domyślnie dozwolony tylko dla użytkownika SYSTEM.

Poniższa konfiguracja włącza tę funkcję (aby install-in i do-not-install-in tagu jest przestrzegane), ale traktuje wszystkie niewymienione pakiety systemowe tak, jakby były install-in dla wszystkich użytkowników:

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