Android поддерживает работу нескольких пользователей на одном устройстве. Дополнительные сведения см. в разделе Поддержка нескольких пользователей . Поскольку не все системные пакеты полезны для всех типов пользователей Android, вы можете использовать белый список, чтобы указать, какие системные пакеты следует предварительно установить для каждого типа пользователей. Не устанавливая заранее ненужные системные пакеты, вы можете оптимизировать время создания пользователей, время запуска и использование памяти.
Используйте XML-файлы конфигурации системы, созданные по образцу frameworks/base/data/etc/preinstalled-packages-platform.xml
, чтобы объявить, какие системные пакеты должны быть первоначально установлены для новых пользователей в зависимости от их типа пользователя. В идеале все системные пакеты на устройстве должны иметь запись в XML-файле (ключ которого соответствует имени манифеста), за исключением статических наложений, которые вместо этого обрабатываются автоматически в соответствии с записью для соответствующего целевого пакета наложения. Способ, которым устройство должно обрабатывать системные пакеты, не перечисленные здесь, контролируется режимом конфигурации .
Типы пользователей
Базовые типы пользователей (каждый пользователь относится хотя бы к одному из этих типов):
Тип пользователя | Описание |
---|---|
SYSTEM | Пользователь 0. |
FULL | Любой непрофильный пользователь-человек. |
PROFILE | Профиль пользователя-человека. |
Точное значение каждого из них определено в frameworks/base/core/java/android/content/pm/UserInfo.java
.
Более детальный контроль можно получить, указав отдельные типы пользователей, поскольку каждый пользователь относится именно к одному из этих типов пользователей, включая типы пользователей AOSP, определенные в frameworks/base/core/java/android/os/UserManager.java
, и любого пользовательского пользователя OEM. типы, определенные в frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java.
Дополнительную информацию см. на странице типов пользователей . В настоящее время типы пользователей 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) | Считайте любой пакет, не упомянутый в файле списка разрешений, неявно внесенным в список разрешений только для пользователя системы. |
Следующая конфигурация включает эту функцию (так что теги install-in
и do-not-install-in
соблюдаются), но все неупомянутые системные пакеты рассматриваются так, как если бы они были install-in
для всех пользователей:
<integer name="config_userTypePackageWhitelistMode">5</integer>