Android obsługuje wielu użytkowników na jednym urządzeniu. Więcej informacji znajdziesz w artykule Obsługa wielu użytkowników. Nie wszystkie pakiety systemowe są przydatne dla wszystkich użytkowników Androida, dlatego możesz 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. W idealnej sytuacji wszystkie pakiety systemowe na urządzeniu powinny mieć wpis w pliku XML (z kluczem w postaci nazwy pliku manifestu), z wyjątkiem nakładek statycznych, które są automatycznie traktowane zgodnie z odpowiednim wpisem w pliku docelowego pakietu nakładki.
Sposób obsługi przez urządzenie pakietów systemowych, które nie są wymienione tutaj, zależy od trybu konfiguracji.
Typy użytkowników
Podstawowe typy użytkowników (każdy użytkownik jest co najmniej jednym z tych typów):
Typ użytkownika | Opis |
---|---|
SYSTEM |
Użytkownik 0. |
FULL |
Każdy użytkownik, który nie jest profilem. |
PROFILE |
Profil użytkownika. |
Dokładne znaczenie każdego z nich zostało określone w dokumentacji frameworks/base/core/java/android/content/pm/UserInfo.java
.
Większą kontrolę można uzyskać, określając 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.profile.PRIVATE
android.os.usertype.system.HEADLESS
Przykłady
Poniżej znajdziesz przykłady dotyczące najczęstszych przypadków użycia:
- Aby pakiet systemowy 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ł wstępnie zainstalowany u wszystkich użytkowników (np. przeglądarki internetowej), czyli aby był 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żna to na przykład zastosować w przypadku aplikacji do ustawiania tapety:
<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> </install-in-user-type>
- Niektóre pakiety systemowe są wymagane dla wszystkich użytkowników, niezależnie od typu. W takich przypadkach 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, które można określić dla poszczególnych typów użytkowników. 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 do-not-install-in
Za pomocą tagu do-not-install-in
możesz też uniemożliwić wstępną instalację pakietów dla określonych typów użytkowników. Pamiętaj, że tagi do-not-install-in
zastępują tagi install-in
w dowolnym pliku. 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 instalowany, ponieważ tag 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 znajdziesz tutaj: frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode
.
W funkcji frameworks/base/core/res/res/values/config.xml
ustaw wartość całkowitą o nazwie config_userTypePackageWhitelistMode
na kombinację tych wartości. Te flagi można łączyć. Najważniejsze flagi to:
Wartość | Opis |
---|---|
0 (0b0000) |
Wyłącz. Zainstaluj wszystkie pakiety systemowe. |
1 (0b0001) |
Wymuś. Instaluj tylko pakiety systemowe, które znajdują się na liście dozwolonych. |
4 (0b0100) |
Uważaj każdy pakiet, który nie jest wymieniony w pliku z dozwolonymi pakietami, za domyślnie dozwolony. |
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. |
W tej konfiguracji funkcja jest włączona (czyli tagi install-in
i do-not-install-in
są stosowane), ale wszystkie niewymienione pakiety systemowe są traktowane tak, jakby były install-in
dla wszystkich użytkowników:
<integer name="config_userTypePackageWhitelistMode">5</integer>