此页面概述了 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()
安全地重置设备和工作配置文件密码。对于支持 基于文件的加密 的设备,此 API 在用户解锁其设备或配置文件之前可用,前提是 DPC 了解加密。
在锁定支持基于文件的加密的设备上的工作配置文件时,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 的权限。