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.java
oraz 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:
- 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>
- Aby pakiet systemowy był fabrycznie zainstalowany u wszystkich użytkowników (np. przeglądarki internetowej), czyli zainstalowany u dowolnego użytkownika typu
FULL
lubPROFILE
, 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>
- 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>
- 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>
- 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
SYSTEM
podstawowy.<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>
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_userTypePackageWhitelistMode
steruje 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>