此页面概述了 Android 8.0(API 级别 26)中引入的新 API、功能和行为更改,这些更改会影响企业中的 Android。
新的 API 和功能
我们使配置文件所有者和设备所有者管理模式比以往任何时候都更加强大、高效且易于配置。我们还启用了全新的部署方案——完全托管设备上的工作配置文件。以下部分将介绍这些功能和其他功能。
完全托管设备上的工作配置文件
在 Android 8.0 中,完全托管设备也可以拥有工作配置文件。这使企业能够分离应用和策略,同时保持对两个配置文件的控制和可见性。现有的设备所有者或不同的设备策略控制器 (DPC) 可以创建托管配置文件。
在完全托管设备上使用工作配置文件时,设备所有者可以
- 通过调用
EXTRA_PROVISIONING_SKIP_USER_CONSENT
在没有用户交互的情况下创建托管配置文件。 - 在创建或删除辅助用户或托管配置文件时接收通知。回调是
onUserAdded()
和onUserRemoved()
。 - 使用
DISALLOW_ADD_MANAGED_PROFILE
阻止其他 DPC 创建托管配置文件。此设置是 Android 8.0 中新配置设备或升级到 Android 8.0 的设备上设备所有者的默认设置。 - 设备所有者还可以使用
DISALLOW_REMOVE_MANAGED_PROFILE
阻止用户删除现有的托管配置文件。
如果设备所有者和配置文件所有者来自同一个 APK 并且所有者是关联的(请参阅下面的用户关联),则它们可以相互通信。
有关支持此新部署方案的更多详细信息,请参阅专门介绍完全托管设备上的工作配置文件的页面。
用户关联
当设备所有者和配置文件所有者代表同一组织时
设备和配置文件所有者可以在同一个 APK 中相互通信——他们可能希望共享策略或状态(请参阅上面的完全托管设备上的工作配置文件)。
设备范围的功能(例如日志记录或允许列出锁定任务模式)可以应用于关联用户。
附加到配置文件或用户的关联 ID 用于识别组织。当关联 ID 匹配时,用户将成为关联用户。设备所有者和配置文件所有者使用 setAffiliationIds() 设置其关联 ID。使用长而难以猜测的字符串 ID 来表示组织。
关联用户的新的访问权限
如果设备上的所有辅助用户和配置文件都与设备所有者关联,则以下功能可用
- 使用
setSecurityLoggingEnabled()
进行安全日志记录。 - 使用
setNetworkLoggingEnabled()
进行网络活动日志记录。 - 使用
requestBugreport()
进行错误报告。
安全日志记录和错误报告以前仅适用于单用户设备或仅有一个配置文件和一个用户的设备。
通过 setLockTaskPackages()
,辅助用户和托管配置文件在与设备所有者关联时可以使用锁定任务模式。有关用户关联的更多详细信息,请参阅关联用户。
自定义配置免责声明
DPC 现在可以在配置过程中向用户显示自己的免责声明。使用 EXTRA_PROVISIONING_DISCLAIMERS
、EXTRA_PROVISIONING_DISCLAIMER_HEADER
和 EXTRA_PROVISIONING_DISCLAIMER_CONTENT
来提供带样式的文本免责声明。DPC 的自定义免责声明将显示在可折叠的“条款”列表中。
安全
配置文件所有者和设备所有者可以使用 setRequiredStrongAuthTimeout()
配置使用辅助身份验证方法(例如指纹或信任代理)解锁设备或配置文件的超时时间段。超时时间段结束后,用户必须使用强身份验证方法(例如密码、PIN 或图案)解锁设备或配置文件。
设备所有者和配置文件所有者可以使用 resetPasswordWithToken()
安全地重置设备和工作配置文件密码。对于支持 基于文件的加密 的设备,如果 DPC 能够识别加密,则此 API 在用户解锁其设备或配置文件之前即可使用。
在锁定支持基于文件加密的设备上的工作配置文件时,lockNow(int)
可以选择使用 FLAG_EVICT_CREDENTIAL_ENCRYPTION_KEY
逐出工作配置文件的主加密密钥。如果用户关闭工作配置文件,也会逐出加密密钥。
此外,设备所有者可以使用 setNetworkLoggingEnabled()
打开公司拥有设备发起的 DNS 查询和 TCP 连接的网络日志记录。有关更多信息,请参阅 网络活动日志记录。
配置文件所有者可以限制主用户哪些软件包可以观察工作配置文件通知。调用 setPermittedCrossProfileNotificationListeners()
设置允许接收通过 NotificationListenerService
事件的白名单软件包。将允许的监听器设置为 null
(默认值)将禁用白名单,所有软件包都可以监听通知。要将事件限制为系统软件包,请传递一个空集。要查看无法访问工作配置文件通知的应用,用户可以点击**设置** > **应用和通知** > **特殊应用访问** > **通知访问**。
最后,配置文件所有者和设备所有者可以使用 getPendingSystemUpdate()
检索设备上可用的挂起系统更新信息。
应用管理 API 代理
API 代理使设备所有者和配置文件所有者能够将应用管理完全卸载到其他应用。 DevicePolicyManager
类提供方法来管理设备和配置文件所有者可以授予软件包的代理范围。
setDelegatedScopes()
方法允许设备所有者和配置文件所有者向其他应用授予对特权 API 的访问权限。getDelegatedScopes()
方法返回授予软件包的范围。getDelegatePackages()
返回具有范围的软件包。
下表显示了 DevicePolicyManager
中的各种方法如何组织到不同的范围中
长时间运行的后台服务
设备和配置文件所有者可以对 DeviceAdminService
进行子类化以创建后台服务。Android 系统会在用户运行时尝试保持服务的运行。如果您想运行定期任务,请考虑在创建后台服务之前使用 JobScheduler
。
控制备份服务
设备所有者可以使用 DevicePolicyManager
中的新方法切换 Android 备份服务。使用 setBackupServiceEnabled()
启用和禁用备份服务。使用 isBackupServiceEnabled()
检查备份服务状态。
Wi-Fi 代理配置
设备所有者和配置文件所有者可以为 Wi-Fi 网络配置 HTTP 代理服务器。使用 PAC 文件或手动设置来为每个 Wi-Fi 网络配置代理服务器。要设置或删除 WifiConfiguration
的代理,请调用其 setHttpProxy()
方法。要获取代理设置,请调用 getHttpProxy()
。
管理员禁用的功能的说明对话框
您的应用应向尝试使用管理员禁用的功能的用户显示有用的说明。所有应用现在都可以使用 createAdminSupportIntent()
创建一个意图,当传递给 startActivity(Intent)
时显示说明对话框。意图包括针对禁用的相机、禁用的屏幕截图以及所有 UserManager
限制的自定义本地化说明。
限制蓝牙
设备所有者可以禁用蓝牙,影响设备上的所有用户和配置文件。要关闭蓝牙,请添加用户限制 DISALLOW_BLUETOOTH
。
设备所有者和配置文件所有者可以使用 DISALLOW_BLUETOOTH_SHARING
阻止用户通过蓝牙发送文件。接收文件不受影响。当由设备所有者设置时,DISALLOW_BLUETOOTH_SHARING
应用于设备上的所有用户。此设置在 Android 8.0 中对于新配置文件和升级到 Android 8.0 的设备上的现有配置文件是默认设置。
行为变更
如果您正在为企业构建应用(包括 DPC),则应查看 Android 8.0 中以下行为变更,并相应地修改您的应用。
删除用户
设备所有者可以使用 removeUser()
删除辅助用户和托管配置文件,即使启用了 DISALLOW_REMOVE_USER
。
安全
身份验证
以下更改已在 DevicePolicyManager
类中生效
lockNow()
方法仅在单独的工作挑战处于活动状态时才锁定工作配置文件。resetPassword()
方法不再可用于充当设备所有者或配置文件所有者并面向 Android 8.0 的 DPC。如果调用,则会抛出安全异常。相反,DPC 应使用resetPasswordWithToken()
。注意:面向 Android 7.1.1(API 级别 25)或更低版本的 DPC 以及仅具有设备管理员权限的 DPC 不受此更改的影响。
- 对于支持基于文件加密的设备,
isActivePasswordSufficient()
在用户在重新引导后第一次解锁设备之前不可用。如果在用户解锁设备之前调用,则会抛出异常。
锁定工作配置文件中的数据
Android 8.0 包含用户界面更改,用于分离锁定工作配置文件中的数据。
- 工作配置文件中应用的通知现在可能会隐藏其内容。以前,通知抽屉会显示来自锁定工作配置文件的工作应用的内容。
- “最近使用”屏幕现在会显示来自锁定工作配置文件的正在运行应用的普通面板。普通彩色面板包含应用的图标和名称。以前,来自锁定工作配置文件的活动或任务会在“最近使用”屏幕中显示预览。
设备完整性
ENSURE_VERIFY_APPS
标志现在是全局用户限制。如果设备上的任何用户具有此限制,则会在设备上的所有用户上强制执行应用验证。例如,如果配置文件所有者在工作配置文件上设置限制,则会在用户的个人配置文件上强制执行应用验证。onSystemUpdatePending()
方法现在除了设备所有者之外还会为配置文件所有者调用。- 使用
SystemUpdatePolicy
类时,推迟策略不再应用于安全补丁,因此安全补丁将无法再推迟。但是,其他策略类型(例如自动和窗口化)的行为不受影响。 - 设备所有者可以使用
wipeData()
触发恢复出厂设置,即使启用了DISALLOW_FACTORY_RESET
。
始终在线 VPN
Android 8.0 包含用户界面更改,以帮助用户了解始终在线 VPN 连接的状态。
- 当始终在线 VPN 连接断开或无法连接时,用户会看到一条不可取消的通知。点击通知会显示 VPN 配置设置。当 VPN 重新连接或用户关闭始终在线 VPN 选项时,通知会消失。
- 始终启用 VPN 允许设备用户阻止任何不使用 VPN 的网络连接。启用此选项时,设置应用会警告用户在 VPN 连接之前无法连接到互联网。设置会提示用户继续或取消。
VPN 应用的VpnService
现在必须在其启动后调用其startForeground()
方法。因为 Android 系统会直接启动 VPN 应用的服务,所以过渡到前台是应用的责任。Android 8.0 会关闭未将 VPN 服务过渡到前台的 VPN 应用。
密码回调
DeviceAdminReceiver
的密码更改回调现在包含一个user
参数来标识密码所属的用户或配置文件。新的方法签名为
onPasswordChanged(Context, Intent, UserHandle)
onPasswordExpiring(Context, Intent, UserHandle)
onPasswordFailed(Context, Intent, UserHandle)
onPasswordSucceeded(Context, Intent, UserHandle)
每个新方法的默认实现都会调用先前版本,并删除用户参数。Android 8.0 已弃用先前的方法。
应用管理 API 代理
以下DevicePolicyManager
类中的方法现已弃用
setCertInstallerPackage()
getCertInstallerPackage()
setApplicationRestrictionsManagingPackage()
getApplicationRestrictionsManagingPackage()
此外,现在可以将单个范围委托给多个软件包。换句话说,设备所有者和配置文件所有者可以同时授予两个不同的软件包访问同一组 API 的权限。