預先安裝的系統套件

Android 支援多位使用者共用單一裝置。詳情請參閱「支援多位使用者」。並非所有系統套件都適用於所有類型的 Android 使用者,因此您可以使用許可清單,指定應為每種類型的使用者預先安裝哪些系統套件。如果不預先安裝不必要的系統套件, 能最佳化使用者建立時間、開始時間和記憶體用量。

使用以 frameworks/base/data/etc/preinstalled-packages-platform.xml 為範本的系統設定 XML 檔案,宣告應根據新使用者的使用者類型,為他們初始安裝哪些系統套件。在理想情況下,裝置上的所有系統套件都應具備 XML 檔案中的項目 (以資訊清單名稱表示),但靜態疊加層除外 而會自動根據其對應項目 覆蓋目標套件。 裝置應如何處理未列於此處的系統套件,取決於設定模式

使用者類型

基礎使用者類型 (每位使用者至少屬於其中一種) 如下:

使用者類型 說明
SYSTEM 使用者 0。
FULL 任何非個人資料的使用者。
PROFILE 個人資料中的使用者。

每個值的確切意義請參閱 frameworks/base/core/java/android/content/pm/UserInfo.java

您可以指定個別使用者類型,獲得更精細的控制權,因為每位使用者都屬於其中一種使用者類型,包括 frameworks/base/core/java/android/os/UserManager.java 中定義的 AOSP 使用者類型,以及 frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java. 中定義的任何 OEM 自訂使用者類型。詳情請參閱「使用者類型」頁面。目前 AOSP 使用者類型包括:

  • 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

範例

以下列舉幾個常見用途:

  1. 「僅」要在使用者 0 中預先安裝系統套件:
    <install-in-user-type package="com.android.example">
        <install-in user-type="SYSTEM" />
     </install-in-user-type>
  2. 如要讓系統套件預先安裝在所有使用者 (例如網路瀏覽器) 身上,也就是安裝在任何 FULLPROFILE 類型的使用者身上,以便處理所有使用者:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
        <install-in user-type="PROFILE" />
    </install-in-user-type>
  3. 系統套件會預先安裝在所有使用者 (除了設定檔使用者) 的裝置上。例如,這可以套用至桌布應用程式:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
    </install-in-user-type>
  4. 無論如何 類型。在這種情況下,請使用:
    <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. 指定個別使用者也能使用更精細的選項 。例如,下列程式碼範例會在任何使用者安裝這個套件 使用者類型為受管理的設定檔或訪客,或屬於 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>

不安裝代碼

您也可以禁止特定使用者類型預先安裝套件 呼叫 do-not-install-in 標記。請注意,do-not-install-in 標記會覆寫任何檔案中的 install-in 標記。例如:

<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 (FULL 的子類型), 由於 do-not-install-in安裝這個套件。 標記的優先順序高於 install-in

使用 config.xml 控制行為

設定資源值 config_userTypePackageWhitelistMode 控管這項功能,以及決定裝置如何解讀系統套件 則沒有代表任何使用者類型的項目若需更多資訊,請參閲 frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode

frameworks/base/core/res/res/values/config.xml 中設定整數 將名為 config_userTypePackageWhitelistMode 的組合 下列值這些標記可以合併使用。最重要的標記如下:

說明
0 (0b0000) 停用。安裝所有系統套件。
1 (0b0001) 強制執行。只在加入許可清單時安裝系統套件。
4 (0b0100) 如有任何許可清單檔案未列出的套件,或該套件已間接列入許可清單,請告訴我們。
8 (0b1000) 針對許可清單檔案中未提及的任何套件,均默示列入許可清單 只供系統辨識 SYSTEM 使用者使用

以下設定會啟用這項功能 (因此 install-indo-not-install-in 標記會被遵循,但會處理未提及的任何標記 系統套件,就像對所有使用者一樣 install-in

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