1. 简介
HarmonyOS通过数字证书(.cer)与Profile文件(.p7b文件)等签名信息来保证应用/服务的完整性,因此,需要使用发布证书和Profile文件对应用/服务进行签名后才能发布。
开发者完成HarmonyOS应用/服务开发后,需要将应用/服务打包成App Pack(.app文件),用于上架到AppGallery Connect。发布应用/服务的流程如下图所示:
2. 准备签名文件
在申请数字证书和Profile文件前,首先需要通过DevEco Studio来生成密钥(存储在.p12的密钥库文件中)和证书请求文件(.csr文件)。
基本概念:
- 密钥:包含非对称加密中的公钥和私钥,存储在密钥库文件中,格式为.p12,公钥和私钥对用于数字签名和验证;
- 证书请求文件:格式为.csr,全称为Certificate Signing Request。包含密钥对中的公钥和公共名称、组织名称、组织单位等信息,用于向AppGallery Connect申请数字证书;
- 数字证书:.cer文件,由华为AppGallery Connect颁发;
- Profile文件:格式为.p7b,包含Harmony应用/服务的包名、数字证书信息、描述应用/服务允许申请的证书权限列表,以及允许应用/服务调试的设备列表(如果应用/服务类型为Release类型,则设备列表为空)等内容,每个应用/服务包中均必须包含一个Profile文件;
2.1 生成密钥和证书请求文件
- 在菜单栏点击Build -> Generate Key and CSR.
如果本地已有对应的密钥,可以直接使用,点击下方的Skip跳过密钥生成过程,直接使用已有密钥生成证书请求文件。
- 在Key Store File中,可以点击Choose Existing选择已有的密钥库文件(存储有密钥的.p12文件);如果没有,可以点击New进行创建:
- Key Store File: 设置密钥库文件存储路径,并填写p12文件名;
- Password:设置密钥库密码(大写+小写+数字+特殊符号两种以上组合),后续签名配置需要使用该密码;
- Confirm Password:再次输入密钥库密码;
- 输入信息之后,点击OK。在Generate Key and CSR界面中,继续填写密钥信息后,点击Next:
- Alias:密钥的别名信息,用于标识密钥名称。后续签名配置需要使用;
- Password:密钥对应的密码,与密钥库密码保持一致,无需手动输入;
- Validity:证书有效期。建议设置25年以上,覆盖应用/服务的完整生命周期;
- Ceritificate:输入证书基本信息,如组织、城市或地区、国家码等;
看描述说最下面的表格,至少填一项即可。
- 点击Next之后,在Generate Key and CSR界面,设置CSR文件存储路径和CSR文件名:
点击Finish创建CSR文件成功,就可以在存储路径下获取生成的密钥库文件(.p12)和证书请求文件(.csr)。
2.2 申请发布证书和Profile文件
通过生成的证书请求文件,向AppGallery Connect申请发布证书和Profile文件,操作如下:
- 在AppGallery Connect中,创建HarmonyOS应用,用于发布证书和Profile文件申请;
可以参考这个文档创建项目和应用: developer.huawei.com/consumer/cn…
- 申请发布证书和Profile文件;
developer.huawei.com/consumer/cn…
2.2.1 申请发布证书
发布证书由AGC颁发的、为HarmonyOS应用配置签名信息的数字证书,可以保障软件代码完整性和发布者身份真实性。证书格式为.cer,包含公钥、证书等指纹信息。
需要注意:每个账号最多申请1个发布证书,和2个调试证书。
- 登录AppGallery Connect,选择“用户与访问”;
- 在左侧导航栏点击”证书管理“,进入”证书管理“页面,点击”新增证书“;
输入证书名称,选择发布证书类型,并选取刚才创建的.csr文件,点击提交:
证书申请成功后,“证书管理”页面展示证书名称等信息,点击“下载”,将生成的证书保存至本地,供后续签名使用。
证书一旦废除将不可恢复,且通过此证书申请的Profile也会全部失效,请谨慎操作。
2.2.2 申请发布Profile
发布Profile格式为.p7b,包含HarmonyOS应用的包名、数字证书信息、应用允许申请的证书权限列表,以及允许应用调试的设备列表(如果应用类型为Release类型,则设备列表为空)等内容。每个应用包中必须包含一个Profile文件。
一个应用最多可申请100个Profile文件。
- 登录[AppGallery Connect],选择“我的项目”。
- 找到对应的项目,点击创建的HarmonyOS应用。
- 在左侧导航栏选择“HarmonyOS应用 > HAP Provision Profile管理”,进入“管理HAP Provision Profile”页面,点击右上角“添加”。
- 在弹出的“HarmonyAppProvision信息”窗口中添加Profile,完成后点击“提交”。
- 发布Profile申请成功后,“管理HAP Provision Profile”页面展示Profile名称、类型等信息。点击“下载”,将生成的Profile保存至本地,供后续签名使用。
3. 编译构建应用
3.1 配置签名信息
现在我们的文件都已经准备好了,需要在DevEco Studio中配置签名信息,需要用到3个文件:
- .p12密钥文件
- .cer证书文件
- .p7b Profile文件
在File > Project Structure > Project > Signing Configs窗口中,取消勾选“Automatically generate signature”(如果是HarmonyOS应用,请勾选“Support HarmonyOS”),然后配置工程的签名信息:
- Store file:选择.p12密钥库文件
- Store password:输入密钥库密码
- Key alias:输入密钥的别名信息
- Key password:输入密钥的密码,和上面一样
- Sign alg:签名算法,固定为SHA256withECDSA。
- Profile file:选择.p7b Profile文件
- Certpath file:选择.cer 证书文件
配置完成后,进入工程级build-profile.json5文件,在“signingConfigs”下可查看到配置成功的签名信息:
3.2 编译构建应用
- 打开DevEco Studio,在顶部菜单栏选择“Build > Build Hap(s)/APP(s) > Build APP(s)”。
- 等待编译构建。编译完成后,将在工程目录“build > outputs > default”目录下,获取可用于发布的应用包。
4. 提交审核
在AppGallery Connect中打开应用,填写完应用信息之后,就可以上传签名完成的应用了:
这里只是了解下发布应用的流程,用的是测试的App。
5. 如何使用调试证书和发布证书分别构建App
developer.huawei.com/consumer/cn…
上面提到了使用发布证书构建App, 配置信息是default,通过Build App构建的app默认是使用发布证书签名的,这种使用发布证书构建的App只能通过应用市场进行分发安装。那如果想使用调试证书构建App呢?
我们可以按照上面的步骤去申请调试证书和对应的profile文件,在DevEco Studio中配置签名信息时,新建个debug选项:
然后在工程级build-profile.json5文件,在“signingConfigs”下可查看到配置成功的签名信息,有两个:default和debug:
"signingConfigs": [
{
"name": "default",
"type": "HarmonyOS",
"material": {
"certpath": "/Users/ceqwang/.ohos/config/default_StudyApplication_PcGNVA7Qv6_XfvlyzaSPIAojmNOPPuQhD108_DlXtKs=.cer",
"storePassword": "0000001A6B3C74549F57F1A4FEDA774516DD41BE33E87F008C7B93780A546F4273BCBA009F0A255442C3",
"keyAlias": "debugKey",
"keyPassword": "0000001A755FCE18B01CAF1FFCF6FBDD041E187A0F6D941FC98E33265768EFA9B48A202A2E48A9BB507D",
"profile": "/Users/ceqwang/.ohos/config/default_StudyApplication_PcGNVA7Qv6_XfvlyzaSPIAojmNOPPuQhD108_DlXtKs=.p7b",
"signAlg": "SHA256withECDSA",
"storeFile": "/Users/ceqwang/.ohos/config/default_StudyApplication_PcGNVA7Qv6_XfvlyzaSPIAojmNOPPuQhD108_DlXtKs=.p12"
}
},
{
"name": "debug",
"type": "HarmonyOS",
"material": {
"certpath": "/Users/ceqwang/.ohos/config/debug_StudyApplication_PcGNVA7Qv6_XfvlyzaSPIAojmNOPPuQhD108_DlXtKs=.cer",
"storePassword": "0000001B4B67E4900947FA53907D4F0FA0ED3FB4D19A51D1055D3E9AF0502234F11BA0F4CBD375A4874BD8",
"keyAlias": "debugKey",
"keyPassword": "0000001B4B08B5A28A7080B98670A350A63E7BC1DAD8FDF460D5C4055A9B36AEB38B3A17FFE184FB41AC4C",
"profile": "/Users/ceqwang/.ohos/config/debug_StudyApplication_PcGNVA7Qv6_XfvlyzaSPIAojmNOPPuQhD108_DlXtKs=.p7b",
"signAlg": "SHA256withECDSA",
"storeFile": "/Users/ceqwang/.ohos/config/debug_StudyApplication_PcGNVA7Qv6_XfvlyzaSPIAojmNOPPuQhD108_DlXtKs=.p12"
}
}
],
我们可以按照上面的文档,配置不同的products,使用不同的签名文件,示例如下:
{
"app": {
// 这里是签名配置信息
"signingConfigs": [
{
"name": "default",
"type": "HarmonyOS",
"material": {
"certpath": "/Users/ceqwang/.ohos/config/default_StudyApplication_PcGNVA7Qv6_XfvlyzaSPIAojmNOPPuQhD108_DlXtKs=.cer",
"storePassword": "0000001A6B3C74549F57F1A4FEDA774516DD41BE33E87F008C7B93780A546F4273BCBA009F0A255442C3",
"keyAlias": "debugKey",
"keyPassword": "0000001A755FCE18B01CAF1FFCF6FBDD041E187A0F6D941FC98E33265768EFA9B48A202A2E48A9BB507D",
"profile": "/Users/ceqwang/.ohos/config/default_StudyApplication_PcGNVA7Qv6_XfvlyzaSPIAojmNOPPuQhD108_DlXtKs=.p7b",
"signAlg": "SHA256withECDSA",
"storeFile": "/Users/ceqwang/.ohos/config/default_StudyApplication_PcGNVA7Qv6_XfvlyzaSPIAojmNOPPuQhD108_DlXtKs=.p12"
}
},
{
"name": "debug",
"type": "HarmonyOS",
"material": {
"certpath": "/Users/ceqwang/.ohos/config/debug_StudyApplication_PcGNVA7Qv6_XfvlyzaSPIAojmNOPPuQhD108_DlXtKs=.cer",
"storePassword": "0000001B4B67E4900947FA53907D4F0FA0ED3FB4D19A51D1055D3E9AF0502234F11BA0F4CBD375A4874BD8",
"keyAlias": "debugKey",
"keyPassword": "0000001B4B08B5A28A7080B98670A350A63E7BC1DAD8FDF460D5C4055A9B36AEB38B3A17FFE184FB41AC4C",
"profile": "/Users/ceqwang/.ohos/config/debug_StudyApplication_PcGNVA7Qv6_XfvlyzaSPIAojmNOPPuQhD108_DlXtKs=.p7b",
"signAlg": "SHA256withECDSA",
"storeFile": "/Users/ceqwang/.ohos/config/debug_StudyApplication_PcGNVA7Qv6_XfvlyzaSPIAojmNOPPuQhD108_DlXtKs=.p12"
}
}
],
// 这里添加了debug模式的产物
// 可以选择配置不同的签名、包名、图标等信息
"products": [
{
"name": "default",
"signingConfig": "default", // 指定签名信息为default
"compileSdkVersion": "4.1.0(11)",
"compatibleSdkVersion": "4.1.0(11)",
"runtimeOS": "HarmonyOS",
},
{
"name": "debug",
"signingConfig": "debug", // 指定签名信息为debug
"compileSdkVersion": "4.1.0(11)",
"compatibleSdkVersion": "4.1.0(11)",
"runtimeOS": "HarmonyOS",
"bundleName": "com.ce.studyapplication" // 指定不同的包名
}
],
"buildModeSet": [
{
"name": "debug",
},
{
"name": "release"
}
]
},
"modules": [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
{
"name": "default",
"applyToProducts": [ // 这个是必须的,指定名字为default的target需要添加到default和debug产物中
"default",
"debug"
]
}
]
}
]
}
如下图所示,点击Entry左边的按钮,在Product对应的下拉列表中选择debug,然后点击Apply:
现在点击Build -> Build App就可以构建出使用调试证书签名的包了,在工程下build文件夹中可以看到:
这样我们就可以随时切换使用任意的证书(调试或者发布)构建App了。
鸿蒙学习路线图
路线图适合人群:
- IT开发人员:想要拓展职业边界,享受新技术带来的溢价红利
- 零基础小白:鸿蒙爱好者,希望从0到1学习,增加一项技能
HarmonyOS 4.0 APP Developer
OpenHarmony 5.0 Next视音频
OpenHarmony 5.0 Next进阶
OpenHarmony 5.0 Next分布式
学习资料
内容概要:《鸿蒙零基础入门学习指南》、《鸿蒙开发学习之UI》、《鸿蒙开发学习之Web》、《鸿蒙开发学习之应用模型》
内容特点:条理清晰,含图像化表示更加易懂。
领取方式:扫描下方二维码即可免费领取!!!

《鸿蒙零基础入门学习指南》
一、快速入门
适用于HarmonyOS应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用,快速了解工程目录的主要文件,熟悉HarmonyOS应用开发流程。
- 开发准备
- 构建第一个ArkTS应用(Stage模型)
- 构建第一个ArkTS应用(FA模型)
- 构建第一个JS应用(FA模型)
二、开发基础知识
- 应用程序包基础知识
- 应用配置文件(Stage模型)
- 应用配置文件概述(FA模型)
三、资源分类与访问
应用开发过程中,经常需要用到颜色、字体、间距、图片等资源,在不同的设备或配置中,这些资源的值可能不同。
- 资源分类与访问
- 创建资源目录和资源文件
- 资源访问
四、学习ArkTs语言
ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。因此,在学习ArkTS语言之前,建议开发者具备TS语言开发能力。
- 初识ArkTS语言
- 基本语法
- 状态管理
- 其他状态管理
- 渲染控制
领取方式:扫描下方二维码即可免费领取!!!

《鸿蒙开发学习之UI》
一、方舟开发框架(ArkUI)概述
二、基于ArkTS声明式开发范式
- 1、UI开发(ArkTS声明式开发范式)概述
- 2、开发布局
- 3、添加组件
- 4、显示图片
- 5、使用动画
- 6、支持交互事件
- 7、性能提升的推荐方法
三、兼容JS的类Web开发范式
- 1、概述
- 2、框架说明
- 3、构建用户界面
- 4、常见组件开发指导
- 5、动效开发指导
- 6、自定义组件
领取方式:扫描下方二维码即可免费领取!!!

《鸿蒙开发学习之Web》
Web组件概述
使用Web组件加载页面
设置基本属性和事件
- 设置深色模式
- 上传文件
- 在新窗口中打开页面
- 管理位置权限
在应用中使用前端页面JavaScript
- 应用侧调用前端页面函数
- 前端页面调用应用侧函数
- 建立应用侧与前端页面数据通道
- 管理页面跳转及浏览记录导航
- 管理Cookie及数据存储
- 自定义页面请求响应
- 使用Devtools工具调试前端页面
ArkTS语言基础类库概述
并发
- 并发概述
- 使用异步并发能力进行开发
- 使用多线程并发能力
- 容器类库
- XML生成、解析、与转换
- 通知
窗口管理
- 窗口开发概述
- 管理应用窗口(Stage模型)
- 管理应用窗口(FA模型)
WebGL
- 概述
- WebGL开发指导
媒体
- 媒体应用开发概念
- 图片
安全
- 访问控制
- ohos.permission.USE_BLUETOOTH
- ohos.permission.DISCOVER_BLUETOOTH
- ohos.permission.MANAGE_BLUETOOTH
- ohos.permission.INTERNET
- ohos.permission.INTERNET
- …
网络与连接
- 网络管理
- IPC与RPC通信
电话服务
- 电话服务开发概述
- 跳转拨号页面
- 获取当前蜂窝网络信号信息
数据管理
- 数据管理概述
- 应用数据持久化
- 场景介绍
- 运作机制
- 约束限制
- 接口说明
- …
文件管理
- 文件管理概述
- 应用文件
- 用户文件
- 分布式文件系统
后台任务管理
- 后台任务总体概述
- 短时任务
- 长时任务
- 延时任务
- 代理提醒
设备管理
- USB服务
- 位置服务
- 传感器
- 分布式跟踪开发指导
- 错误管理
- …
国际化
- 国际化开发概述
- Intl开发指导
- I18n开发指导
应用测试
- 自动化测试框架使用指南
Native API相关指导
- Native API在应用工程中的使用指导
- Drawing开发指导
- Rawfile开发指导
- NativeWindow 开发指导
- …
领取方式:扫描下方二维码即可免费领取!!!

《鸿蒙开发学习之应用模型》
应用模型概述
- 应用模型的构成要素
- 应用模型解读
Stage模型开发指导
- Stage模型开发概述
- Stage模型应用组件
FA模型开发指导
- FA模型开发概述
- FA模型应用组件配置
- 进程模型
- 线程模型
领取方式:扫描下方二维码即可免费领取!!!
