前言
最近有越来越多的开发者关注MDM(Mobile Device Management)相关的开发内容,MDM在iOS和Android端上大量应用在企业内部的设备管控。因此,下文会为大家介绍如何开发一个MDM管理应用。
开发环境
系统版本: OpenHarmony 5.0.0.27
DevEco Studio版本: OpenHarmony: DevEco Studio 4.1 Release(build: 4.1.0.400)
SDK版本: OpenHarmony: 4.1.7.7
开发流程
新建工程
打开IDE,依次点击File -> New -> Create Project -> Application -> [OpenHarmony]Empty Ability -> Next -> Finish,创建一个默认的OpenHarmony Api11应用工程。
新增MDM配置
-
在工程Module对应的ets目录下,右键选择“New > Directory”,新建一个目录并命名为EnterpriseExtAbility。
-
在EnterpriseExtAbility目录,右键选择“New > ArkTS File”,新建一个文件并命名为EnterpriseExtAbility.ets。
-
打开EnterpriseExtAbility.ets文件,导入EnterpriseAdminExtensionAbility模块,自定义类继承EnterpriseAdminExtensionAbility并加上需要的应用通知回调方法,如onAdminEnabled()、onAdminDisabled()等回调方法。当设备管理员应用被激活或者去激活时,则可以在对应回调方法中接受系统发送通知。
src/main/ets/EnterpriseExtAbility/EnterpriseExtAbility.ets
`import EnterpriseAdminExtensionAbility from '@ohos.enterprise.EnterpriseAdminExtensionAbility';
export default class EnterpriseAdminAbility extends EnterpriseAdminExtensionAbility {
onAdminEnabled() {
console.info("onAdminEnabled");
}
onAdminDisabled() {
console.info("onAdminDisabled");
}
onBundleAdded(bundleName: string) {
console.info("EnterpriseAdminAbility onBundleAdded bundleName:" + bundleName);
}
onBundleRemoved(bundleName: string) {
console.info("EnterpriseAdminAbility onBundleRemoved bundleName" + bundleName);
}
};
- 在工程Module对应的module.json5配置文件中注册ServiceExtensionAbility,type标签需要设置为“enterpriseAdmin”,srcEntry标签表示当前ExtensionAbility组件所对应的代码路径。
`"extensionAbilities": [
{
"name": "MDMExtensionAbility",
"type": "enterpriseAdmin",
"exported": true,
"srcEntry": "./ets/EnterpriseExtAbility/EnterpriseExtAbility.ets"
}
],`
- 在工程Module对应的module.json5配置文件中添加MDM相关权限。
`"requestPermissions": [
{
"name": "ohos.permission.MANAGE_ENTERPRISE_DEVICE_ADMIN",
},
{
"name": "ohos.permission.ENTERPRISE_SUBSCRIBE_MANAGED_EVENT"
}
]`
签名
修改SDK下的11\toolchains\lib\UnsgnedReleasedProfileTemplate.json
文件
`···
"app-distribution-type":"enterprise_mdm",
···`
依次点击 File -> Project Structure -> Project -> Signing Configs -> Automatically generate signature -> Apply -> OK,在build-profile.json5
里确认签名完成。
编译构建预置
- 通过以下指令
`hdc file recv /system/etc/app/install_list.json D:\install_list.json`
导出install_list.json
配置文件。
- 在
install_list.json
新增MDM应用配置:
`{
"app_dir" : "/system/app/com.winslei.mdmmanager",
"removable" : true
}`
- 通过以下指令
`hdc shell "mount -o remount,rw /"
hdc file send D:\install_list.json /system/etc/app/install_list.json`
将install_list.json
替换到设备里。
-
依次点击 Build -> Build Hap(s)/APP(s) -> Build Haps(s),待编译完成后可看到构建好的包
entry\build\default\outputs\default\entry-default-signed.hap
。 -
通过以下指令
`hdc shell "mount -o remount,rw /"
hdc shell "rm -rf /data/*"
hdc file send entry-default-signed.hap /system/app/com.winslei.mdmmanager/MDM.hap
hdc shell "reboot"`
将构建好的hap替换到设备里并重启,可看到桌面上已正常安装MDM应用。
FAQ
安装时报错install failed due to grant request permissions failed
Question:
`Install Failed: error: failed to install bundle.
code:9568289
error: install failed due to grant request permissions failed.` </pre>
**Answer:** 使用了[gitee.com/openharmony…](https://link.juejin.cn?target=https%3A%2F%2Fgitee.com%2Fopenharmony%2Fdocs%2Fblob%2Fmaster%2Fzh-cn%2Fapplication-dev%2Fsecurity%2FAccessToken%2Fpermissions-for-mdm-apps.md "https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-mdm-apps.md")里的权限时必须按照[签名](#%E7%AD%BE%E5%90%8D "#%E7%AD%BE%E5%90%8D")的操作进行p7b的重签,应用安装时会检测签名里的应用类型是否为**enterprise_mdm**。
安装时报错install permission denied
Question:
`Install Failed: error: failed to install bundle.
code:9568266
error: install permission denied.`
error hilog:
`E C01120/BundleMgrService: [bundle_permission_mgr.cpp(VerifyCallingPermissionForAll:295)]permission ohos.permission.INSTALL_ENTERPRISE_MDM_BUNDLE denied, callerToken : 805820136
E C01120/BundleMgrService: [bundle_install_checker.cpp(VaildEnterpriseInstallPermission:315)]enterprise normal/mdm bundle can not be installed by shell` </pre>
**Answer:** MDM应用无法通过hdc安装,hdc没有安装MDM应用的所需要的权限,如`ohos.permission.INSTALL_ENTERPRISE_MDM_BUNDLE`、`ohos.permission.INSTALL_SELF_BUNDLE`等,只能通过[编译构建预置](#%E7%BC%96%E8%AF%91%E6%9E%84%E5%BB%BA%E9%A2%84%E7%BD%AE "#%E7%BC%96%E8%AF%91%E6%9E%84%E5%BB%BA%E9%A2%84%E7%BD%AE")来由系统安装。
写在最后
●如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
●点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
●关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
●更多鸿蒙最新技术知识点,请移步前往小编:https://gitee.com/