Appearance
应用打包发布
鸿蒙应用打包流程:HAP/HAR/HSP → 签名 → 证书 → 上架 AppGallery。
1. 应用包类型
| 包类型 | 全称 | 用途 | 类比 Android |
|---|---|---|---|
| HAP | HarmonyOS Ability Package | 应用安装包 | APK |
| HAR | HarmonyOS Archive | 静态共享库 | AAR |
| HSP | HarmonyOS Shared Package | 动态共享库 | 动态库 |
2. HAP / HAR / HSP 对比
2.1 HAP — 应用包
HAP 包结构:
├── entry/
│ ├── src/main/
│ │ ├── ets/ # 代码
│ │ ├── resources/ # 资源
│ │ └── module.json5 # 配置
│ └── build-profile.json5
└── *.hap(打包后)2.2 HAR — 静态共享包
HAR 特性:
├─ 编译时拷贝 → 每个引用方都有自己的副本
├─ 体积较大(代码重复)
├─ 修改后所有引用方需重新编译
└─ 适用:独立模块、不共享数据的库2.3 HSP — 动态共享包
HSP 特性:
├─ 运行时共享 → 多个 HAP 共享同一份代码
├─ 体积较小(避免重复)
├─ 修改后无需重新编译引用方
└─ 适用:大型公共库、需要多 HAP 共享的场景2.4 对比决策
需要多 HAP 共享大库?
├─ 是 → HSP(动态共享,体积小)
└─ 否
├─ 编译期共享? → HAR(静态拷贝)
└─ 打包应用? → HAP3. 签名流程
3.1 签名文件类型
| 文件 | 用途 |
|---|---|
| .p12 | 密钥库(私钥+公钥) |
| .csr | 证书签名请求 |
| .cer | 调试/发布证书 |
| .p7b | Profile 描述文件 |
3.2 签名流程
1. 生成密钥库 (.p12)
→ DevEco Studio → Project Structure → Signing Config → Generate
2. 生成证书请求 (.csr)
→ 密钥库 → 生成 CSR
3. 申请调试/发布证书 (.cer)
→ AppGallery Connect → 证书管理 → 下载
4. 注册设备(调试)
→ AppGallery Connect → 我的项目 → 设备管理
5. 生成 Profile (.p7b)
→ DevEco Studio → 自动生成3.3 dev-certs.json 配置
json5
{
"autoCert": {
"storeFile": "debug.keystore",
"storePassword": "00000000000000000000",
"keyAlias": "debug",
"keyPassword": "00000000000000000000",
"certpath": "debug.cer"
},
"certpath": [
{
"name": "default",
"password": "00000000000000000000",
"path": "debug.p7b"
}
]
}4. 打包配置
4.1 build-profile.json5
json5
{
"app": {
"signingConfigs": [
{
"name": "default",
"type": "HarmonyOS",
"material": {
"certpath": "debug.p7b",
"storePassword": "00000000000000000000",
"keyAlias": "debug",
"keyPassword": "00000000000000000000",
"profile": "debug.p7b",
"signAlg": "SHA256withECDSA",
"storeFile": "debug.keystore"
}
}
],
"products": [
{
"name": "default",
"signingConfig": "default",
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS",
"bundleName": "com.example.app"
}
]
}
}4.2 hvigorfile.ts
typescript
import { appTasks } from '@ohos/hvigor-ohos-plugin'
export default {
system: appTasks,
dependencies: ['@ohos/hypium-plugin'],
plugins: []
}5. 发布流程
5.1 上架 AppGallery
1. 注册 AppGallery Connect 账号
→ https://developer.huawei.com
2. 创建应用
→ 我的项目 → 创建应用 → 填写信息
3. 上传签名证书
→ 应用信息 → 签名管理 → 上传发布证书
4. 配置应用信息
→ 名称、图标、描述、分类、截图
5. 提交审核
→ 发布管理 → 创建版本 → 上传 HAP → 提交审核
6. 审核通过 → 上架5.2 审核注意事项
| 检查项 | 说明 |
|---|---|
| 权限声明 | 所有权限需有正当理由 |
| 隐私政策 | 必须有隐私条款 |
| 功能完整性 | 功能需完整可用 |
| 界面规范 | 符合鸿蒙设计规范 |
| 安全合规 | 无恶意代码、无隐私泄露 |
6. 包体积优化
6.1 优化策略
包体积优化
├── 代码压缩/混淆(ProGuard)
├── 资源压缩(图片压缩、移除无用资源)
├── HSP 共享公共库
├── 动态导入(import() 按需加载)
├── 多 HAP 分包
└── 移除无用模块6.2 ProGuard 配置
json5
// build-profile.json5
"buildModeSet": [
{
"name": "release",
"args": {
"enableProguard": true,
"proguardConfig": "proguard-rules.pro"
}
}
]# proguard-rules.pro
-dontwarn com.example.**
-keep class com.example.model.** { *; }
-keepattributes Signature
-keepattributes Annotation7. 面试高频考点
Q1: HAP/HAR/HSP 的区别?
回答:HAP(应用包)、HAR(静态共享包,编译时拷贝)、HSP(动态共享包,运行时共享)。
Q2: 什么时候用 HSP?
回答:多 HAP 模块共用体积较大的公共库时,用 HSP 避免代码重复打包,减小体积。
Q3: 签名流程?
回答:生成密钥库(.p12) → 生成 CSR → 申请证书(.cer) → 注册设备 → 生成 Profile(.p7b)。
🐱 小猫提示:打包发布记住 "HAP=APK、HAR=静态、HSP=动态共享、签名五步法"。