Android 通过分离用户帐号和应用数据,在单个 Android 设备上支持多用户。例如,父母可能会允许孩子使用家庭平板电脑,一个家庭可以共用一辆汽车,或者危机应对小组可能会共用一个移动设备来执行随叫随到的任务。
术语
Android 在描述 Android 用户和帐号时使用以下术语。
常规
Android 设备管理使用以下常规术语
- 用户:每个用户旨在供不同的自然人使用。每个用户都有不同的应用数据和一些独特的设置,以及一个用于显式切换用户的用户界面。当另一个用户处于活动状态时,用户可以在后台运行;系统会在适当时管理关闭用户以节省资源。辅助用户可以直接通过用户界面创建,也可以从 设备管理 应用创建。
- 帐号:帐号包含在用户中,但不是由用户定义的,用户也不是由任何给定的帐号定义或链接的。用户和个人资料包含其自己唯一的帐号,但不是必须拥有帐号才能正常工作。帐号列表因用户而异。如需了解详情,请参阅 Account 类定义。
- 个人资料:个人资料具有分离的应用数据,但共享一些系统范围的设置(例如,Wi-Fi 和蓝牙)。个人资料是用户的子集,并且与用户的存在相关联。一个用户可以有多个个人资料。个人资料通过 设备管理 应用创建。个人资料始终与父用户具有不可变的关联,由创建个人资料的用户定义。个人资料的存在时间不会超过创建用户的生命周期。
- 应用:应用的数据存在于每个关联的用户中。应用数据在同一用户中的其他应用中沙盒化。同一用户中的应用可以通过 IPC 相互交互。如需了解详情,请参阅Android 企业版。
用户类别
Android 设备管理使用以下用户类别。
- 系统用户:添加到设备的首个用户。系统用户无法移除,除非执行恢复出厂设置,并且始终在运行,即使其他用户在前台也是如此。此用户还具有只有它才能设置的特殊权限和设置。
- 无头系统用户:如果设备配置为在无头系统用户模式下运行(通过设置
ro.fw.mu.headless_system_user=true
),则为添加到设备的首个用户。无头系统用户始终在后台运行,因此此类设备需要额外的用户在前台才能实现用户互动。 - 辅助用户:添加到设备的除系统用户之外的任何用户。辅助用户可以移除(由他们自己或管理员用户移除),并且不会影响设备上的其他用户。这些用户可以在后台运行,并继续保持网络连接。
- 访客用户:临时辅助用户。访客用户有一个显式选项,可在其用途结束后快速删除访客用户。一次只能有一个访客用户。
- 管理员用户:有权创建和移除其他用户以及控制一些常规多用户设置的用户。默认情况下,只有系统用户是管理员。
个人资料类别
Android 使用以下个人资料类别
- 受管理个人资料:由应用创建,用于包含工作数据和应用。它们完全由个人资料所有者(创建企业个人资料的应用)管理。启动器、通知和最近任务由父用户和企业个人资料共享。
- 受限个人资料:使用基于父用户的帐号,父用户可以控制受限个人资料上可用的应用。仅在平板电脑和电视设备上可用。
- 克隆个人资料:Android 支持创建单独的克隆个人资料用户类型,以实现在设备上运行单个应用的两个实例。AOSP 不提供对该功能的端到端支持。OEM 需要添加自定义项,才能向 Android 用户交付完整的功能。
- 私密个人资料:这是一个与设备其余部分隔离的沙盒空间,可以与主用户分开锁定。私密个人资料只能为主用户存在。当私密个人资料解锁时,应用会在“设置”、“共享表”、“照片选择器”和 DocsUI 中变得可见,但应用在锁定时会被隐藏。私密个人资料可以与工作资料和克隆个人资料一起存在于同一设备上。
用户类型
Android 11 已将上述用户和个人资料分类制定为明确定义的用户类型,代表 Android 多用户功能允许的所有不同类型的用户和个人资料。
预定义的 AOSP 用户类型在 frameworks/base/core/java/android/os/UserManager.java
中定义,目前包括
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
android.os.usertype.profile.CLONE
android.os.usertype.profile.PRIVATE
OEM 可以通过叠加 frameworks/base/core/res/res/xml/config_user_types.xml
文件来配置这些用户类型。这有助于更改每种用户类型的默认配置,包括其默认限制、图标、徽章和允许的最大用户数。
除了可配置的 AOSP 用户类型之外,OEM 还可以使用 frameworks/base/core/res/res/xml/config_user_types.xml
文件定义新的个人资料类型。这允许 OEM 在需要时引入自己的非托管个人资料类型。但是,OEM 有责任根据需要进行平台修改以支持这些更改,包括修改任何检查受管理个人资料的代码,以便现在处理新的个人资料类型(如果适用)。
启用多用户功能
多用户功能默认处于停用状态。要启用该功能,设备制造商必须定义一个资源叠加层,以替换 frameworks/base/core/res/res/values/config.xml
中的以下值
<!-- Maximum number of supported users --> <integer name="config_multiuserMaximumUsers">1</integer> <!-- Whether Multiuser UI should be shown --> <bool name="config_enableMultiUserUI">false</bool>
要应用此叠加层并在设备上启用访客用户和辅助用户,请使用 Android 构建系统的 DEVICE_PACKAGE_OVERLAYS
功能来替换以下值
config_multiuserMaximumUsers
,值大于1
config_enableMultiUserUI
,值为true
设备制造商可以决定用户的最大数量。如果设备制造商或其他方修改了设置,他们必须确保短信和电话功能按照Android 兼容性定义文档 (CDD) 中的定义工作。
管理多用户
用户和个人资料的管理(受限个人资料除外)由以编程方式调用 DevicePolicyManager
类中的 API 来限制使用的应用执行。
企业可以使用用户和个人资料来管理设备上应用和数据的生命周期和范围,结合上面概述的类型以及 DevicePolicyManager 和 UserManager API 来构建针对其用例量身定制的独特解决方案。
多用户系统行为
当用户添加到设备时,当另一个用户在前台时,某些功能会受到限制。由于应用数据按用户分隔,因此这些应用的状态因用户而异。例如,发往当前未处于焦点状态的用户的帐号的电子邮件在该用户和帐号在设备上处于活动状态之前将不可用。
注意:要为辅助用户启用或停用电话和短信功能,请转到设置 > 用户,选择用户,然后将允许通话和短信设置切换为关闭。
当辅助用户在后台时,存在一些限制。例如,后台辅助用户无法显示用户界面或激活蓝牙服务。此外,如果设备需要更多内存来支持前台用户的操作,则系统进程会停止后台辅助用户。
在 Android 设备上使用多用户时,请注意以下行为
- 通知会同时显示给单个用户的所有帐号。
- 其他用户的通知在激活之前不会显示。
- 每个用户都会获得一个工作区来安装和放置应用。
- 任何用户都无权访问另一个用户的应用数据。
- 任何用户都可以影响所有用户的已安装应用。
- 管理员用户可以移除应用,甚至移除辅助用户建立的整个工作区。
- 默认情况下,退出访客模式时,访客用户会话中的信息不会持久保留。如果您希望访客用户会话中的信息持久保留,则必须创建一个资源叠加文件,将
config_guestUserAllowEphemeralStateChange
设置为false
。如需详细了解如何创建叠加文件,请参阅使用资源叠加层自定义构建。
Android Automotive 多用户
Android Automotive 依赖于 Android 的多用户实现来提供共享设备体验。
汽车用户类型
除了上面列出的用户类型之外,Automotive 版本还因以下用户类型而引人注目
- 无头系统用户。系统用户托管所有系统服务。为了在 Automotive 上支持多用户,系统用户还必须是无头用户。只有一个无头用户。无头系统用户
- 必须始终在后台运行。
- 除非在设备配置的情况下,否则用户无法移除或直接访问该用户。例如,用户无法切换到此用户类型来执行下载应用或添加帐号等任务。
- 只能通过恢复出厂设置来清除。
- 常规用户。与上面描述的辅助用户相同,只是辅助用户
- 不会在后台运行(在切换离开后)。
- 可以直接通过用户界面创建。
- 具有分离的应用数据,但共享一些系统范围的设置。例如,Wi-Fi 和蓝牙。
注意事项
以下例外情况适用于 Automotive 中的无头系统用户和常规(辅助)用户
- 无头系统用户不支持工作资料。
- 默认情况下,常规(辅助)用户可以完全访问电话和短信。
- 默认情况下,常规(辅助)用户不在后台运行。
启用无头系统用户
自 Android 10 起,多用户功能可用于汽车用例。重要的区别包括
- 系统用户是无头的,仅在后台运行。
- 人类用户不与系统用户互动。
要启用无头系统用户,设备制造商必须按照上述说明启用多用户。
启用无头用户后- 要声明设备为 Automotive 设备,请添加功能
android.hardware.type.automotive
。 - 将
ro.fw.headless_system_user
设置为true
。 - 将
config_multiuserMaximumUsers
的值设置为2
(或更高)。
如需了解详情,请参阅 Automotive 中的多用户支持。
Android Automotive 多显示器多用户
Android 15 允许完整的辅助用户(不是当前前台用户)启动 Activity 并访问分配给他们的显示器上的 UI。此功能使 Android Automotive OS 中的多个并发用户能够支持车内体验,从而为单个 Android 实例中的多个乘客提供专用的 UI 体验。
要启用此功能,设备制造商必须定义一个资源叠加层,以替换 frameworks/base/core/res/res/values/config.xml
中的以下值
<!-- Whether the device allows full users to start in background visible on displays. Should be false for most devices, except automotive vehicle with passenger displays. Note: this flag does NOT control the Communal Profile, which is not a full user. --> <bool name="config_multiuserVisibleBackgroundUsers">false></bool>
您可以启用以下附加配置来体验仅乘客(无驾驶员)的体验
<!-- Whether the device allows users to start in background visible on the default display. Should be false for all devices in production. Can be enabled only for development use in passenger-only automotive build (i.e., when Android runs in a separate system in the back seat to manage the passenger displays). When set to true, config_multiuserVisibleBackgroundUsers must also be true. --> <bool name="config_multiuserVisibleBackgroundUsersOnDefaultDisplay">false</bool>
在 Android 15 中,您还可以为多名乘客启用访客用户车内体验。要为开发用途启用多个访客用户,设备制造商必须定义一个资源叠加层,以在 frameworks/base/core/res/res/xml/config_user_types.xml
中配置允许的最大访客用户数,例如在此示例中
<user-types> <full-type name="android.os.usertype.full.GUEST" max-allowed='4'> <default-restrictions no_factory_reset="true" no_remove_user="true" no_modify_accounts="true" no_install_apps="true" no_install_unknown_sources="true" no_uninstall_apps="true"/> </full-type> </user-types>