本部分介绍如何启用和验证设备管理功能(为托管资料准备设备时所需)。同时,本部分还介绍了在企业环境中至关重要的设备所有者用户情境。
除了 AOSP 代码之外,设备还需要以下组件来与托管资料配合使用。
常规要求
要支持设备管理,设备必须符合以下常规要求。
热 HAL 值
Android 7.0 及更高版本提供对 HardwarePropertiesManager API 的支持,该 API 是用于设备监控和运行状况报告的 API,可让应用查询设备硬件的状态。该 API 通过 android.os.HardwarePropertiesManager
提供,并通过 HardwarePropertiesManagerService
对硬件热 HAL (hardware/libhardware/include/hardware/thermal.h
) 进行调用。该 API 是受保护的 API,也就是说,只有设备/资料所有者设备策略控制器 (DPC) 应用和现有的 VrListenerService
可以调用它。
要支持 HardwarePropertiesManager API,设备热 HAL 实现必须能够报告以下值:
值 | 报告所用单位 | 启用 |
---|---|---|
[CPU|GPU|电池|设备表面] 的温度 | 以摄氏度 | 应用可以查看设备温度和组件限制/关闭温度 |
CPU 处于活动状态的时间/总启用时间 | 毫秒 | 应用可以查看每个核心的 CPU 使用率 |
风扇转速 | 每分钟转数 (RPM) | 应用可以查看风扇转速 |
当核心(或 GPU、电池、风扇)进入离线状态或接通/断开电源时,实现应正确处理报告值对应的情况。
不允许低 RAM
设备不得是低 RAM 设备,这意味着不得定义 ro.config.low_ram
。当定义了 low_ram
标记时,框架会自动将用户数限制为 1。
Uses-feature
设备必须定义以下 uses-feature
:
android.software.managed_users android.software.device_admin
要确认这些 uses-feature
值已在设备上进行了定义,请运行:adb shell pm list features
。
仅限基本应用
默认情况下,在配置托管设备时,只能启用资料正确运行所必需的应用。OEM 必须通过修改以下文件确保受管理资料或设备具有所有必需的应用:
vendor_required_apps_managed_profile.xml vendor_required_apps_managed_device.xml vendor_disallowed_apps_managed_profile.xml vendor_disallowed_apps_managed_device.xml /* * The following are for Android 9 and higher only */ vendor_required_apps_managed_user.xml vendor_disallowed_apps_managed_user.xml
受管理用户需要的应用和不允许的应用将应用于通过 DevicePolicyManager#createAndManageUser
创建的次要用户。
Nexus 设备的示例:
Android 8.x 及更低版本
pacakages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_device.xml
Android 9 及更高版本
frameworks/base/core/res/res/values/vendor_required_apps_managed_device.xml
<resources> <!-- A list of apps to be retained on the managed device --> <string-array name="vendor_required_apps_managed_device"> <item>com.android.vending</item> <!--Google Play --> <item>com.google.android.gms</item> <!--Required by Play --> <item>com.google.android.contacts</item> <!--Google or OEM Contacts--> <item>com.google.android.googlequicksearchbox</item> <!--Google Launcher --> <item>com.google.android.launcher</item> <!--Google Launcher or OEM Launcher --> <item>com.google.android.dialer</item> <!--Google or OEM dialer to enable making phone calls --> </string-array> </resources>
Android 8.x 及更低版本
packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_profile.xml
Android 9 及更高版本
frameworks/base/core/res/res/values/vendor_required_apps_managed_profile.xml
<resources> <!-- A list of apps to be retained in the managed profile. This includes any Google experience apps required. --> <string-array name="vendor_required_apps_managed_profile"> <item>com.android.vending</item> <!-- Google Play --> <item>com.google.android.gms</item> <!-- Required by Play --> <item>com.google.android.contacts</item> <!-- Google or OEM Contacts --> </string-array> </resources>
启动器要求
您必须更新启动器,以支持用来标记应用的图标徽章(在 AOSP 中提供,代表托管应用)以及其他徽章界面元素(如近期活动和通知)。如果您在 AOSP 中使用未经修改的 launcher3,那么您可能已经支持此徽章功能。
NFC 要求
NFC 设备必须在“开箱即用”过程(即安装向导)中启用 NFC,并配置为接受托管配置 Intent:
packages/apps/Nfc/res/values/provisioning.xml
<bool name="enable_nfc_provisioning">true</bool> <item>application/com.android.managedprovisioning</item>
设置要求
支持“开箱即用”过程(即安装向导)的设备应实现设备所有者配置功能。当“开箱即用”过程开始时,应检查其他进程(如设备所有者配置)是否已经完成用户设置,如果已完成,则应触发返回主屏幕的 Intent 完成设置。配置应用会捕获此 Intent,然后将控制权交给新设置的设备所有者。
要满足设置要求,请将以下代码添加到设备设置的主 Activity 中:
@Override protected void onStart() { super.onStart(); // When returning to a setup wizard activity, check to see if another setup process // has intervened and, if so, complete an orderly exit boolean completed = Settings.Secure.getInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 0) != 0; if (completed) { startActivity(new Intent(Intent.ACTION_MAIN, null) .addCategory(Intent.CATEGORY_HOME) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)); finish(); } ... }