前言

最近有越来越多的开发者关注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配置

  1. 在工程Module对应的ets目录下,右键选择“New > Directory”,新建一个目录并命名为EnterpriseExtAbility。

  2. 在EnterpriseExtAbility目录,右键选择“New > ArkTS File”,新建一个文件并命名为EnterpriseExtAbility.ets。

  3. 打开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);
  }
};
  1. 在工程Module对应的module.json5配置文件中注册ServiceExtensionAbility,type标签需要设置为“enterpriseAdmin”,srcEntry标签表示当前ExtensionAbility组件所对应的代码路径。

    "extensionAbilities": [
    {
     "name": "MDMExtensionAbility",
     "type": "enterpriseAdmin",
     "exported": true,
     "srcEntry": "./ets/EnterpriseExtAbility/EnterpriseExtAbility.ets"
    }
    ],
    
  2. 在工程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里确认签名完成。

编译构建预置

  1. 通过以下指令

    hdc file recv /system/etc/app/install_list.json D:\install_list.json
    

    导出install_list.json配置文件。

  2. install_list.json新增MDM应用配置:

    {
    "app_dir" : "/system/app/com.winslei.mdmmanager",
    "removable" : true
    }
    
  3. 通过以下指令

    hdc shell "mount -o remount,rw /"
    hdc file send D:\install_list.json /system/etc/app/install_list.json
    

    install_list.json替换到设备里。

  4. 依次点击 Build -> Build Hap(s)/APP(s) -> Build Haps(s),待编译完成后可看到构建好的包entry\build\default\outputs\default\entry-default-signed.hap

  5. 通过以下指令

    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.

Answer: 使用了https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-mdm-apps.md里的权限时必须按照签名的操作进行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

Answer: MDM应用无法通过hdc安装,hdc没有安装MDM应用的所需要的权限,如ohos.permission.INSTALL_ENTERPRISE_MDM_BUNDLEohos.permission.INSTALL_SELF_BUNDLE等,只能通过编译构建预置来由系统安装。

参考文献

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/enterprise-device-management/enterprise-extensionAbility.md

https://gitee.com/openharmony/applications_app_samples/tree/master/code/SystemFeature/ApplicationModels/EnterpriseAdminExtensionAbility

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-mdm-apps.md

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐