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
範例
以下列舉幾個常見用途:
- 「僅」要在使用者 0 中預先安裝系統套件:
<install-in-user-type package="com.android.example"> <install-in user-type="SYSTEM" /> </install-in-user-type>
- 如要讓系統套件預先安裝在所有使用者 (例如網路瀏覽器) 身上,也就是安裝在任何
FULL
或PROFILE
類型的使用者身上,以便處理所有使用者:<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> <install-in user-type="PROFILE" /> </install-in-user-type>
- 系統套件會預先安裝在所有使用者 (除了設定檔使用者) 的裝置上。例如,這可以套用至桌布應用程式:
<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> </install-in-user-type>
- 無論如何
類型。在這種情況下,請使用:
<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>
- 指定個別使用者也能使用更精細的選項
。例如,下列程式碼範例會在任何使用者安裝這個套件
使用者類型為受管理的設定檔或訪客,或屬於
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-in
和
do-not-install-in
標記會被遵循,但會處理未提及的任何標記
系統套件,就像對所有使用者一樣 install-in
:
<integer name="config_userTypePackageWhitelistMode">5</integer>