Android O device owner&zero touch
最近manager让研究下device owner和zero touch。部分心得如下。
1.zero touch相关网址
https://support.google.com/androidpartners_gms/answer/7506173?hl=zh-Hans
这个网址普通的google账号是看不了,需要申请GMS partner权限,这个可以找gms认证机构来帮助申请,我司找的harman。
2.support zero touch的方式
根据文档,zero_touch是配合gms core api使用的,所以只有gms版本可以配置该功能。
我们这边需要做的是:
1. vendor\google\products\gms.mk
预制OobConfig
PRODUCT_PACKAGES += \
OobConfig
2. vendor\google\products\gms_overlay\frameworks\base\core\res\res\values\config.xml
新增
<string name="config_deviceProvisioningPackage">com.google.android.apps.work.oobconfig</string>
<string-array translatable="false" name="config_defaultFirstUserRestrictions">
<item>"no_oem_unlock"</item>
</string-array>
我这边根据文档的test method来看,对应的log打印了,是没问题的。
3.device owner相关的网址
Nfc方式enable device owner的google demo,一定要看下源码熟悉下
https://github.com/googlesamples/android-NfcProvisioning/
https://github.com/googlesamples/android-DeviceOwner/
Android for work总结
https://blog.****.net/liu1314you/article/details/52028823
https://blog.****.net/liu1314you/article/details/52038916
device owner google官网介绍
https://developers.google.com/android/work/play/emm-api/prov-devices
Cisco对于device owner的介绍
https://documentation.meraki.com/SM/Deployment_Guides/Android_Enterprise_Deployment_Guide
nfc的一个操作视频,可以参考
https://sdgsystems.com/blog/implementing-kiosk-mode-android-part-3-android-lollipop
关于操作的视频建议去youtube上找点操作视频看看
4.device owner的玩法
1.adb的方法
root手机 or userdebug/eng软件,先装上面的google的DO demo
adb shell dpm set-device-owner com.example.android.deviceowner/.DeviceOwnerReceiver
打印出:
Success: Device owner set to package ComponentInfo{com.example.android.deviceowner/com.example.android.deviceowner.DeviceOwnerReceiver}
Active admin set to component {com.example.android.deviceowner/com.example.android.deviceowner.DeviceOwnerReceiver}
apk给do前
apk给do后
2.google 的DO(device owner) demo和Nfc-Pro demo的正确玩法
准备工作
github上拉下google demo的代码(前面给了网址),在as里面生成apk
两台机器,A和B
A:userdebug/eng 软件,带gms包
B:没啥要求,装NfcProvisioning这个apk
操作方式
B打开NfcProvisioning这个apk,输入wifi(用翻墙的)和密码,加密类型不填。
A恢复出厂设置,在开机向导界面adb install DO 这个apk(这也是为啥不用user软件)。
A连接wifi,和B连接同一个翻墙的wifi。
B和A机器背靠背,然后按提示一步步进行,即可。
B机器:
A机器:
DO mode下的apk保留
A进入Launcher后,可以看到,很多apk不见了,只保留了部分系统apk。
系统apk的保留这部分操作实际是google设计的。对应的文件是:
packages/apps/ManagedProvisioning/res/values/required_apps_managed_device.xml
packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_device.xml
看名字就可以知道一个是针对android 原生的一些apk的保留,一个是针对google包的一些apk的保留。
这里要注意一点:
gms包里面是有个overlay的,所以在带有gms包的情况下,真正生效的是gms包里的xml
vendor/google/products/gms_overlay/packages/apps/ManagedProvisioning/ vendor_required_apps_managed_device.xml
这里我们碰到一个问题,因为没有预制gms包的Mms,而是用的android 的Mms。可以看到gms包的vendor_required_apps_managed_device.xml中保留了gms包的Mms。可以理解google设计的逻辑是想要在device owner的模式保留短信这个功能的。
而我们没有预制gms包的Mms,但是required_apps_managed_device.xml中却没有保留android的Mms,所以我们要在required_apps_managed_device.xml中需要加上android的Mms。这样就可以在DO mode下保留Mms了。
这两个文件的修改可以根据大家对于gms包的定制来做对应修改。
5.device owner 有价值做我还没做完的
1.testDPC
这个是google 的一个demo,让我们知道获得DO的apk可以做哪些事。
https://github.com/googlesamples/android-testdpc/
https://play.google.com/store/apps/details?id=com.afwsamples.testdpc&hl=en
2.device owner provision最正规的玩法
(也是企业客户用的方式,并不是我们之前的那种demo做法)
也就是要找提供EMMs的partner,他们的apk会和他们的服务器交互。为企业部署实现更强大的功能。
这些partner有很多,有Cisco,MobileIron等,可以参考
https://androidenterprisepartners.withgoogle.com/emm/
当然,这些partner,google自己也算。
这个我根据https://blog.****.net/liu1314you/article/details/52038916这个去尝试走了一下google作为partner的完整流程,发现现在需要注册google的G-suite账号,要出钱买域名。后续就没继续了,有兴趣的可以完整做一遍。对DO的理解会更深刻。
3.device owner相关类的学习
frameworks/base/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
frameworks/base/core/java/android/app/admin/DevicePolicyManagerInternal.java
frameworks/base/core/java/android/app/admin/DevicePolicyManager.java
frameworks/base/core/java/android/app/admin/IDevicePolicyManager.aidl
…….
6.device owner学习过程中经常提到的一些概念
enterprise mobility management (EMM) 企业移动管理
Device policy controller(DPC)设备策略控制器
Android for Work (AFW)
Work Profile
device owner(DO)
device admin
zero touch
….
因为google的玩法和叫法也是在迭代的变化,大概感兴趣可以都去了解归纳下。最好的方式是去google官网。
总结:如果客户问贵司机器是否支持device owner。那他指的多半是企业device owner provision的那套玩法。那么是需要gms包做支持的,并且设备不是low ram。
以我的理解,user版本的软件上只能在开机向导处开始device owner provision一系列的操作。所以gms包是必须的(这一系列的操作中,不仅仅只是开机向导的代码,还有引用GMS mandatory core packages的一些东西,因为没有开机向导的源码,只能从各方面文档中推断出这一点)