Preinstalowane pakiety systemowe

Android obsługuje wielu użytkowników na jednym urządzeniu. Aby dowiedzieć się więcej, zobacz temat Obsługa wielu użytkowników . Ponieważ nie wszystkie pakiety systemowe są przydatne dla wszystkich typów użytkowników Androida, możesz użyć listy dozwolonych, aby określić, które pakiety systemowe powinny być preinstalowane dla każdego typu użytkownika. Nie instalując wstępnie niepotrzebnych pakietów systemowych, możesz zoptymalizować czas tworzenia użytkowników, czas uruchamiania i wykorzystanie pamięci.

Użyj plików XML konfiguracji systemu, wzorowanych na frameworks/base/data/etc/preinstalled-packages-platform.xml , aby zadeklarować, które pakiety systemowe powinny być początkowo instalowane dla nowych użytkowników w zależności od ich typu użytkownika. W idealnym przypadku wszystkie pakiety systemowe na urządzeniu powinny mieć wpis w pliku XML (oznaczony nazwą manifestu), z wyjątkiem nakładek statycznych, które zamiast tego są traktowane automatycznie zgodnie z wpisem odpowiadającym im pakietowi docelowemu nakładki. Sposób, w jaki urządzenie powinno obsługiwać pakiety systemowe, które nie są tutaj wymienione, jest kontrolowany przez tryb konfiguracji .

Typy użytkowników

Podstawowe typy użytkowników (każdy użytkownik będzie co najmniej jednym z tych typów) to:

Rodzaj użytkownika Opis
SYSTEM Użytkownik 0.
FULL Dowolny użytkownik niebędący profilem.
PROFILE Użytkownik profilu będący człowiekiem.

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

Bardziej szczegółową kontrolę można uzyskać, określając indywidualne typy użytkowników, ponieważ każdy użytkownik jest dokładnie jednym z tych typów użytkowników, co obejmuje typy użytkowników AOSP zdefiniowane w frameworks/base/core/java/android/os/UserManager.java i dowolny niestandardowy użytkownik OEM typy zdefiniowane w frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java. Aby uzyskać więcej informacji, zobacz stronę z typami użytkowników . Obecnie typy użytkowników AOSP obejmują:

  • 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ższe przykłady dotyczą najczęstszych przypadków użycia:

  1. Aby pakiet systemowy był preinstalowany tylko dla 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ł preinstalowany na wszystkich użytkownikach będących ludźmi (taki jak przeglądarka internetowa), to znaczy, aby był zainstalowany na dowolnym użytkowniku typu FULL lub PROFILE , co odnosi się do wszystkich użytkowników będących ludźmi:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
        <install-in user-type="PROFILE" />
    </install-in-user-type>
    
  3. Aby pakiet systemowy był preinstalowany na wszystkich użytkownikach ludzkich z wyjątkiem użytkowników profili. Można to na przykład zastosować do aplikacji do tapet:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
    </install-in-user-type>
    
  4. Niektóre pakiety systemowe naprawdę muszą być dostępne dla wszystkich użytkowników, niezależnie od ich 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>
    
  5. Dostępne są również bardziej szczegółowe opcje poprzez określenie poszczególnych typów użytkowników. Na przykład poniższy przykładowy kod instaluje ten pakiet na dowolnym użytkowniku, którego typem użytkownika jest profil zarządzany, gość lub jest typem podstawowym SYSTEM .
    <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>
    

znacznik „nie instaluj”.

Można również zapobiec wstępnej instalacji pakietów dla określonych typów użytkowników za pomocą znacznika do-not-install-in . Należy pamiętać, że znaczniki do-not-install-in zastępują znaczniki 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 zostanie zainstalowany, ponieważ znacznik do-not-install-in ma pierwszeństwo przed install-in .

Kontrolowanie zachowania za pomocą pliku config.xml

Wartość zasobu konfiguracyjnego config_userTypePackageWhitelistMode steruje tą funkcją i określa, w jaki sposób urządzenie interpretuje pakiety systemowe, które nie zawierają wpisu dla żadnego typu użytkownika. Aby uzyskać więcej informacji, zobacz frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode .

W frameworks/base/core/res/res/values/config.xml ustaw liczbę całkowitą o nazwie config_userTypePackageWhitelistMode na kombinację następujących wartości. Flagi te można łączyć. Najważniejsze flagi to:

Wartość Opis
0 (0b0000) Wyłączyć. Zainstaluj wszystkie pakiety systemowe.
1 (0b0001) Egzekwować. Instaluj pakiety systemowe tylko wtedy, gdy znajdują się na liście dozwolonych.
4 (0b0100) Traktuj każdy pakiet, który nie jest wymieniony w pliku listy dozwolonych, jako domyślnie umieszczony na liście dozwolonych.
8 (0b1000) Traktuj każdy pakiet, który nie jest wymieniony w pliku listy dozwolonych, jako domyślnie umieszczony na liście dozwolonych tylko dla użytkownika SYSTEM.

Następująca konfiguracja włączy tę funkcję (tak, że tagi install-in i do-not-install-in będą przestrzegane), ale wszelkie niewymienione pakiety systemowe będą traktowane tak, jakby były install-in dla wszystkich użytkowników:

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