Skip to content

应用打包发布

鸿蒙应用打包流程:HAP/HAR/HSP → 签名 → 证书 → 上架 AppGallery。


1. 应用包类型

包类型全称用途类比 Android
HAPHarmonyOS Ability Package应用安装包APK
HARHarmonyOS Archive静态共享库AAR
HSPHarmonyOS 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(静态拷贝)
   └─ 打包应用? → HAP

3. 签名流程

3.1 签名文件类型

文件用途
.p12密钥库(私钥+公钥)
.csr证书签名请求
.cer调试/发布证书
.p7bProfile 描述文件

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 Annotation

7. 面试高频考点

Q1: HAP/HAR/HSP 的区别?

回答:HAP(应用包)、HAR(静态共享包,编译时拷贝)、HSP(动态共享包,运行时共享)。

Q2: 什么时候用 HSP?

回答:多 HAP 模块共用体积较大的公共库时,用 HSP 避免代码重复打包,减小体积。

Q3: 签名流程?

回答:生成密钥库(.p12) → 生成 CSR → 申请证书(.cer) → 注册设备 → 生成 Profile(.p7b)。


🐱 小猫提示:打包发布记住 "HAP=APK、HAR=静态、HSP=动态共享、签名五步法"