当前位置: 首页 > news >正文

【Harmony】鸿蒙企业应用详解

【HarmonyOS】鸿蒙企业应用详解

一、前言

1、应用类型定义速览:
HarmonyOS目前针对应用分为三种类型:普通应用,游戏应用,企业应用。

而企业应用又分为,企业普通应用和设备管理应用MDM(Mobile Device Management)

HarmonyOS NEXT版本中,普通应用用户只能通过应用市场下载并安装应用包。

企业类应用包括企业普通应用和MDM(Mobile Device Management)设备管理应用。仅在企业定制设备上运行,不会在普通消费者设备上运行。不会上架华为应用市场。

2、MDM应用实现详解:
设备管理应用通过EnterpriseAdminExtensionAbility来调用MDM Kit中的接口,实现管理设备的意图。
在这里插入图片描述
3、企业应用的前提
企业应用和普通应用最大的分别是,企业应用只能运行在特定的企业设备上,不能安装在面向普通消费者的商用设备上。

并且企业应用需要和华为AGC平台进行申请:


申请成为企业MDM应用开发者
申请将应用加入企业MDM应用受邀名单
可向华为运营人员申请开通。在收到您的申请后,华为运营人员将在1-3个工作日内为您安排对接人员。申请方法如下:申请邮箱地址:agconnect@huawei.com。
邮件标题:[申请企业MDM应用发布证书和发布Profile]-[应用名称]-[应用包名]-[APP ID]-[Developer ID],Developer ID等查询方法可参见查看应用基本信息。
邮件正文:请说明申请原因。

二、企业如何选择普通应用,还是企业应用?

上述问题,最关键的核心因素是,是否只需要满足,企业应用不对外,在应用市场不公开下载,但是企业内部可以安装的诉求。

如果只是该诉求,完全可以选择普通应用,但是不公开发布的策略。

非公开发布:
在这里插入图片描述

是指您可以将不适合公开分发的应用以非公开方式在华为应用市场上发布,使其仅可通过链接被用户发现。非公开发布的应用不会出现在任何华为应用市场的类别、推荐、排行榜、搜索结果或其他列表中。

企业应用
只有企业特殊需求,例如在自己的企业设备上,例如银行的平板,教育机构的平板或者手机,都可以选择企业应用。

设备管理应用
还有一种情况,当企业需要管理员工设备时,此时就需要MDM,将应用创建为设备管理应用。

三、企业MDM应用发布证书与Profile申请全流程指南

1、准备申请资质与材料

(1)企业开发者账号认证
注册华为开发者联盟账号(https://developer.huawei.com/consumer/cn/),并完成企业实名认证(需提供营业执照、法人信息等)。
认证通过后,在“管理中心”选择“HarmonyOS应用”,进入MDM应用开发专区。

(2)资质审核材料
企业MDM应用需说明使用场景(如企业设备管理、数据安全管控等),并提交《企业应用开发资质声明》(华为开发者平台可下载模板)。
若涉及敏感权限(如设备控制、数据监控),需额外提供企业内部安全策略文档。

2、生成证书请求文件(CSR)

(1)工具准备
使用OpenSSL工具生成密钥对与CSR文件,示例命令:

# 生成私钥(2048RSA)openssl genrsa -out enterprise_mdm.key 2048# 生成CSR文件(需填写企业信息,Common Name建议使用企业域名)openssl req -new -key enterprise_mdm.key -out enterprise_mdm.csr -subj "/C=CN/O=企业名称/CN=企业域名"

(2)上传CSR申请证书
在华为开发者平台“证书管理”页面,选择“创建企业MDM发布证书”,上传CSR文件并提交审核(审核周期通常为1-3个工作日)。

3、下载与配置证书

审核通过后,下载证书文件(.p12格式),并在DevEco Studio中配置:

  1. 打开Project Structure > Signing Configs,添加.p12证书路径及密码;
  2. build.gradle中指定签名配置,确保应用打包时使用该证书签名:
    signingConfigs {release {storeFile file('enterprise_mdm.p12')storePassword '证书密码'keyAlias '证书别名'keyPassword '密钥密码'}
    }
    
4、Profile文件核心参数说明

Profile文件(.p7b或.json格式)需包含以下关键信息(通过DevEco Studio自动生成或手动配置):

(1)应用基本信息
bundleName:
应用包名(需与证书绑定的包名一致)

versionCode/versionName:
应用版本号

distributionType:
设置为enterprise_mdm(标识MDM应用类型)

(2)MDM专属权限声明
在module.json5中声明MDM必需权限(参考仅MDM应用可用权限):

"requestPermissions": [{"name": "ohos.permission.MDM_CONTROL_DEVICE", // 设备控制权限"reason": "用于企业设备管理"},{"name": "ohos.permission.MDM_SET_SECURITY_POLICY", // 安全策略设置权限"reason": "用于下发企业安全策略"}// 其他MDM权限...
]

(3)设备管理能力声明
在Profile中添加设备管理扩展能力(需与激活命令中的类名一致):

"deviceManagement": {"adminExtention": "com.enterprise.mdm.DeviceAdminExtension", // 设备管理扩展类名"supportTypes": ["super_admin", "byod"] // 支持超级管理或BYOD模式
}
5、生成与签名Profile文件

(1)通过DevEco Studio生成

  1. 在项目中创建profile.json,按上述规范配置参数;
  2. 使用证书对Profile签名:通过以下hdc命令生成签名后的Profile文件(.p7b)。

hdc shell bm sign-profile -p profile.json -k enterprise_mdm.p12 -a 证书别名 -w 证书密码

(2)手动配置注意事项
Profile中的distributionType必须为enterprise_mdm,否则非企业设备无法安装(参考错误码9568398);
权限声明需与MDM Kit开发指南一致,避免因权限缺失导致功能失效。

6、设备激活为MDM管理设备

(1)超级设备管理模式(全管控)


hdc shell edm enable-admin -n com.enterprise.mdm -a com.enterprise.mdm.DeviceAdminExtension

(2)BYOD模式(自带设备办公)


hdc shell edm enable-admin -n com.enterprise.mdm -a com.enterprise.mdm.DeviceAdminExtension -t byod

注意:激活限制
同一设备仅能激活一个超级设备管理应用;
BYOD模式下,设备仍保留部分用户个人权限,需在Profile中配置byod支持。

2. 部署与测试验证

(1)安装MDM应用
使用已签名的HAP包和Profile文件,通过以下方式安装:

hdc shell bm install -p mdm_app.hap -f mdm_profile.p7b

(2)功能验证
检查MDM权限是否生效(如调用setSecurityPolicy接口下发密码策略);
测试设备管理功能(如远程锁定、应用黑名单管理,参考黑名单处理文档)。

注意

1、非企业设备安装失败(错误码9568398)
原因:
Profile中的distributionType为enterprise_mdm,但设备未经过企业认证。

解决方案:
仅在企业定制设备或通过MDM激活的设备上安装,或修改Profile类型为普通应用(非MDM场景)。

2、MDM权限调用失败
原因:
未正确激活设备管理应用或权限声明缺失。

解决方案:
确认已执行edm enable-admin激活,并在Profile和代码中完整声明权限(如ohos.permission.MDM_CONTROL_DEVICE)。

3、证书与Profile绑定错误
原因:
HAP包签名证书与Profile签名证书不一致。

解决方案:
使用同一证书对HAP包和Profile签名,通过jarsigner -verify命令校验签名一致性。

http://www.dtcms.com/a/264501.html

相关文章:

  • 小型水电站综合自动化系统的介绍
  • 计算机组成笔记:缓存替换算法
  • QT6 源(147)模型视图架构里的表格窗体 QTableWidget 的范例代码举例,以及其条目 QTableWidgetItem 类型的源代码。
  • Re:从零开始的 磁盘调度进程调度算法(考研向)
  • Node.js 安装使用教程
  • Spring 生态创新应用:微服务架构设计与前沿技术融合实践
  • Kuikly 与 Flutter 的全面对比分析,结合技术架构、性能、开发体验等核心维度
  • 对于3DGS的理解
  • Redisson 与 Java 驻内存数据网格:分布式缓存的高可用解决方案
  • 【强化学习】深度解析 GRPO:从原理到实践的全攻略
  • 微信小程序入门实例_____打造你的专属单词速记小程序
  • 【并发编程】AQS原理详解笔记1
  • 基于SpringBoot和Leaflet的区域冲突可视化系统(2025企业级实战方案)
  • 服务器异常宕机或重启导致 RabbitMQ 启动失败问题分析与解决方案
  • 使用tensorflow的线性回归的例子(五)
  • 界面组件DevExpress WPF中文教程:Grid - 如何获取节点?
  • 【办公类-53-05】20250701Python模仿制作2025学年第一学期校历(excel+pdf)
  • 计算机网络(五)数据链路层 MAC和ARP协议
  • Mabl 基于云端的智能化自动化测试平台
  • 解决Python升级后CMD仍显示旧版本:环境变量优先级问题详解
  • vue中ref()和reactive()区别
  • 聚类算法学习
  • PAL(程序辅助语言模型)技术详解
  • 通讯录管理系统设计与实现(C++)
  • URL时间戳参数深度解析:缓存破坏与前端优化的前世今生
  • 调试 WebView 旧资源缓存问题:一次从偶发到复现的实战经历
  • 安装Pillow失败,无libjpeg包
  • OWASP Top 10 是什么?
  • Docker+vLLM内网离线部署DeepSeek
  • 数据结构与算法:贪心(二)