支持多用户

Android 通过分离用户帐户和应用程序数据来支持单个 Android 设备上的多个用户。例如,父母可以允许他们的孩子使用家庭平板电脑,家庭可以共享一辆汽车,或者关键响应团队可以共享移动设备来执行值班任务。

术语

Android 在描述 Android 用户和帐户时使用以下术语。

一般的

Android 设备管理使用以下通用术语:

  • 用户:每个用户旨在由不同的自然人使用。每个用户都有不同的应用程序数据和一些独特的设置,以及用于在用户之间显式切换的用户界面。当另一个用户处于活动状态时,一个用户可以在后台运行;系统会在适当的时候管理关闭用户以节省资源。可以直接通过用户界面或从设备管理应用程序创建辅助用户。
  • 帐户:帐户包含在用户内,但不是由用户定义,用户也不是由任何给定帐户定义或链接到任何给定帐户。用户和配置文件包含自己独特的帐户,但不需要拥有帐户即可运行。帐户列表因用户而异。有关详细信息,请参阅Account 类定义。
  • 配置文件:配置文件具有独立的应用程序数据,但共享一些系统范围的设置(例如 Wi-Fi 和蓝牙)。个人资料是用户存在的子集,并与之相关。一个用户可以有多个配置文件。配置文件是通过设备管理应用程序创建的。配置文件始终与父用户具有不可变的关联,该关联由创建配置文件的用户定义。配置文件不会在创建用户的生命周期之外存在。
  • 应用程序:应用程序的数据存在于每个关联的用户中。应用程序数据来自同一用户内的其他应用程序的沙箱。同一用户内的应用程序可以通过 IPC 相互交互。有关详细信息,请参阅Android 企业版

用户类别

Android 设备管理使用以下类别的用户。

  • 系统用户:添加到设备的第一个用户。除非通过恢复出厂设置,否则系统用户无法删除,并且即使其他用户位于前台也始终在运行。该用户还具有只有其可以设置的特殊权限和设置。
  • 无头系统用户:如果设备配置为在无头系统用户模式下运行(通过设置ro.fw.mu.headless_system_user=true ),则添加到设备的第一个用户。无头系统用户始终在后台运行,因此此类设备需要额外的前台用户才能实现用户交互。
  • 次要用户:除系统用户外添加到设备的任何用户。辅助用户可以被删除(由自己或管理员用户删除),并且不会影响设备上的其他用户。这些用户可以在后台运行并继续拥有网络连接。
  • 访客用户:临时辅助用户。来宾用户有一个明确的选项,可以在来宾用户不再有用时快速删除该来宾用户。一次只能有一名访客用户。
  • 管理员用户:有权创建和删除其他用户以及控制一些常规多用户设置的用户。默认情况下,只有系统用户是管理员。

配置文件类别

Android 使用以下类别的配置文件:

  • 托管配置文件:由应用程序创建,用于包含工作数据和应用程序。它们由个人资料所有者(创建公司个人资料的应用程序)专门管理。启动器、通知和最近任务由父用户和公司配置文件共享。
  • 受限配置文件:使用基于父用户的帐户,父用户可以控制受限配置文件上可用的应用程序。仅适用于平板电脑和电视设备。
  • 克隆配置文件: Android 支持创建单独的克隆配置文件用户类型,以便能够在设备上运行单个应用程序的两个实例。 AOSP 不提供对该功能的端到端支持。 OEM 需要添加自定义功能才能为 Android 用户提供完整的功能。

用户类型

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

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_enableMultiUserUItrue

设备制造商可以决定最大用户数量。如果设备制造商或其他人修改了设置,他们必须确保短信和电话按照Android 兼容性定义文档(CDD) 中的定义工作。

管理多个用户

用户和配置文件(受限配置文件除外)的管理由以编程方式调用DevicePolicyManager类中的 API 来限制使用的应用程序执行。

企业可以使用用户和配置文件来管理设备上应用程序和数据的生命周期和范围,使用上述类型结合DevicePolicyManagerUserManager API 来构建适合其用例的独特解决方案。

多用户系统行为

将用户添加到设备后,当另一个用户位于前台时,某些功能会受到限制。由于应用程序数据是按用户分开的,因此这些应用程序的状态因用户而异。例如,发送至当前未关注的用户帐户的电子邮件将不可用,直到该用户和帐户在设备上处于活动状态。

注意:要为辅助用户启用或禁用电话和短信功能,请转至设置 > 用户,选择用户,然后将允许电话和短信设置切换为关闭。

当辅助用户在后台时存在一些限制。例如,后台辅助用户无法显示用户界面或激活蓝牙服务。此外,如果设备需要额外的内存用于前台用户的操作,系统进程将停止后台辅助用户。

在 Android 设备上使用多个用户时,请记住以下行为:

  • 一次性显示单个用户的所有帐户的通知。
  • 其他用户的通知只有在激活后才会显示。
  • 每个用户都有一个工作区来安装和放置应用程序。
  • 任何用户都无法访问其他用户的应用程序数据。
  • 任何用户都可以影响所有用户已安装的应用程序。
  • 管理员用户可以删除应用程序,甚至可以删除辅助用户建立的整个工作区。
  • 默认情况下,退出访客模式时,访客用户会话中的信息不会保留。如果您希望保留来宾用户会话中的信息,则必须创建一个资源覆盖文件,将config_guestUserAllowEphemeralStateChange设置为false 。有关创建覆盖文件的更多信息,请参阅使用资源覆盖自定义构建

Android 汽车多用户

Android Automotive 依靠 Android 的多用户实现来提供共享的设备体验。

汽车用户类型

除了上面列出的用户类型之外,汽车版本对于以下类型的用户也值得注意:

  • 无头系统用户。系统用户承载所有系统服务。为了支持 Automotive 上的多个用户,系统用户也必须是无头的。只有一名无头用户。无头系统用户:
    • 必须始终在后台运行。
    • 用户无法直接删除或访问,设备配置情况除外。例如,用户无法切换到此用户类型来执行下载应用程序或添加帐户等任务。
    • 只能通过恢复出厂设置来清除。
  • 普通用户。与上面描述的次要用户相同,除了次要用户:
    • 不要在后台运行(切换后)。
    • 可以直接通过用户界面创建。
    • 分离应用程序数据,但共享一些系统范围的设置。例如,Wi-Fi 和蓝牙。

注意事项

以下例外情况适用于无头系统用户和汽车领域的常规(二级)用户:

  • 无头系统用户不支持工作配置文件。
  • 默认情况下,常规(次要)用户拥有通话和短信的完全访问权限。
  • 默认情况下,常规(辅助)用户不会在后台运行。

启用无头系统用户

从 Android 10 开始,多用户功能可用于汽车用例。重要的区别包括:

  • 系统用户是无头的,仅在后台运行。
  • 人类用户不与系统用户交互。

为了启用无头系统用户,设备制造商必须启用如上所述的多用户。

当启用无头用户时:
  1. 要将设备声明为 Automotive,请添加功能android.hardware.type.automotive
  2. ro.fw.headless_system_user设置为true
  3. config_multiuserMaximumUsers的值设置为2 (或更高)。

有关详细信息,请参阅汽车中的多用户支持

Android Automotive 多个显示器上的多用户

Android 14 中的一项新实验功能允许完整的辅助用户(不是当前前台用户)启动活动并访问分配给他们的显示器上的 UI。此功能使 Android Automotive OS 中的多个并发用户能够支持车内体验,从而在单个 Android 实例中为多名乘客提供专用的 UI 体验。

要启用此功能以供开发使用,设备制造商必须定义资源覆盖来替换frameworks/base/core/res/res/values/config.xml中的以下值:

<!-- Whether the device allows users to start in background visible on displays.
    Should be false for all devices in production. Can be enabled only for development use
    in automotive vehicles with passenger displays. -->

<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 14 中,您可以为多名乘客作为访客用户启用车内体验。要启用多个访客用户进行开发,设备制造商必须定义一个资源覆盖,在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>