【OpenHarmony/HarmonyOS】从 Debug 到 Release:Hvigor 构建、签名、混淆与敏感配置治理
2026/7/24 1:06:18 网站建设 项目流程

【OpenHarmony/HarmonyOS】从 Debug 到 Release:Hvigor 构建、签名、混淆与敏感配置治理

应用能在模拟器运行,不代表已经具备发布条件。本文以 HarmonyOS Stage 工程为例,梳理产品配置、HAP 构建、签名、混淆和密钥治理,并特别说明哪些内容绝不能进入仓库或技术文章。📦

一、认识应用级与模块级配置

应用级build-profile.json5定义产品、SDK、签名和模块:

{"app": {"products": [ {"name":"default","targetSdkVersion":"6.0.0(20)","compatibleSdkVersion":"6.0.0(20)","runtimeOS":"HarmonyOS"}, {"name":"release","targetSdkVersion":"6.0.0(20)","runtimeOS":"HarmonyOS"} ],"buildModeSet": [ {"name":"debug"}, {"name":"release"} ] } }

模块级entry/build-profile.json5声明 Stage 模型、构建目标和 Release 混淆:

{"apiType":"stageMode","buildOptionSet": [ {"name":"release","arkOptions": {"obfuscation": {"ruleOptions": {"enable": true,"files": ["./obfuscation-rules.txt"] } } } } ] }

应用级回答“构建哪个产品并如何签名”,模块级回答“entry 模块如何编译和打包”。

二、AppScope 与 module.json5

AppScope/app.json5保存 Bundle Name 和版本:

{"app": {"bundleName":"tan.ke.chongji","versionCode": 1000001,"versionName":"1.0.1","icon":"$media:app_icon","label":"$string:app_name"} }

module.json5则配置 EntryAbility、手机/平板、横屏、页面列表、权限和备份扩展。发布前需要检查:

  • versionCode单调递增;
  • versionName与发布说明一致;
  • Bundle Name 与控制台应用一致;
  • 只声明实际使用的权限;
  • 图标、名称和启动背景使用 Release 资源;
  • 备份内容符合隐私与业务预期。

三、Hvigor 任务体系

根工程使用appTasks,entry 模块使用hapTasks

import{ appTasks }from'@ohos/hvigor-ohos-plugin';exportdefault {system: appTasks, plugins: [] };
import{ hapTasks }from'@ohos/hvigor-ohos-plugin';exportdefault {system: hapTasks, plugins: [] };

构建前应锁定依赖、确认 SDK 和 Node 环境,再分别验证 Debug 与 Release。Release 构建启用混淆后可能出现只在发布包中的问题,因此不能用 Debug 成功代替 Release 验证。

四、签名材料绝不能硬编码在仓库 🔐

签名通常涉及:

  • .p12密钥库;
  • .cer证书;
  • .p7bProfile;
  • keyAlias;
  • storePassword 和 keyPassword。

这些内容不应以明文或可逆密文直接提交到项目配置,更不能出现在 CSDN 代码截图中。即使密码看似经过编码,只要构建工具能直接读取,它仍属于凭据。

安全做法包括:

  • 本地开发签名放在用户目录,不入库;
  • CI 使用密钥管理服务或受保护变量临时注入;
  • 仓库只保留不含秘密的模板配置;
  • .gitignore排除证书、密钥库和本地 Profile;
  • 日志对路径和凭据脱敏;
  • 泄漏后立即吊销/轮换,而不是仅删除历史当前版本。

如果秘密曾进入 Git 历史,仅在最新提交删除并不够,旧提交仍可访问。需要按组织流程轮换密钥并清理历史。

五、开发配置与发布配置分离

推荐使用占位或环境注入:

{"name":"release","type":"HarmonyOS","material": {"certpath":"${RELEASE_CERT_PATH}","profile":"${RELEASE_PROFILE_PATH}","storeFile":"${RELEASE_STORE_FILE}"} }

具体变量机制应按 DevEco Studio/Hvigor 当前版本支持方式配置。重点是源码仓库不保存真实秘密。

还应为 Debug/Release 提供不同能力开关:

DEBUG:模拟设备发现、调试信息、性能面板、详细日志RELEASE:关闭模拟设备、关闭调试 HUD、日志脱敏、启用混淆

当前 P2P 会无条件添加模拟设备,发布前应纳入这一开关。

六、混淆不是安全边界

ArkTS Release 混淆可以提高反编译阅读成本、减小部分符号暴露,但不能保护硬编码 Token、短信密钥或签名密码。客户端拥有的秘密最终都可能被提取。

混淆后需重点验证:

  • 反射或字符串引用的类名是否保留;
  • JSON 字段是否因重命名导致协议不兼容;
  • WebView、路由页面名和资源名是否正常;
  • 第三方 SDK 要求的 keep 规则;
  • 云数据库对象模型的字段映射;
  • 日志和堆栈是否保留可排障能力。

七、依赖清单要保持单一且合法

oh-package.json5中不应出现重复的dependencies键。JSON5 解析器可能采用最后一个值,导致前一个依赖块被静默覆盖。发布前应运行依赖解析和锁文件校验。

还要确认:

  • 根工程与 entry 的 Hypium 版本是否有意不同;
  • 声明的 Lottie 是否实际使用;
  • AGC Auth 依赖是否真的集成到 entry;
  • 未使用依赖是否移除以减少包体和供应链风险;
  • 锁文件与配置一致。

八、资源和包体治理

项目包含多份 WAV、图片和多语言资源。发布前检查:

  • 大图是否压缩到合适尺寸;
  • BGM 是否使用适合的编码和码率;
  • 未引用资源是否移除;
  • AppScope 与 entry 是否重复放置可合并资源;
  • 启动图标在不同设备清晰;
  • 文件名避免临时后缀和重复配置,例如带(1)的服务配置文件。

音频与 6MB 级图标很容易成为包体主要来源,优化收益通常比压缩几 KB ArkTS 更高。

九、发布日志必须脱敏

Release 包中不应输出:

  • 用户手机号、OpenID、Token;
  • 完整局域网 IP 与设备名;
  • 云配置对象;
  • 签名路径和证书信息;
  • 用户头像 URI;
  • 完整异常对象中可能包含的请求内容。

建议封装日志级别,Release 只保留必要错误码和匿名会话 ID。

十、发布前质量门禁 ✅

  1. Debug 和 Release 均能干净构建;
  2. 单元测试、ohosTest 和关键真机流程通过;
  3. 所有语言资源完整;
  4. 模拟设备与调试 HUD 已关闭;
  5. 权限与隐私政策一致;
  6. 签名秘密不在仓库、产物日志和文章中;
  7. 混淆包完成启动、路由、游戏、结算测试;
  8. 包体、内存、启动时间和帧率达到目标;
  9. 弱网、无网、音频失败和存储损坏可降级;
  10. 版本号、图标、应用名和发布说明正确。

十一、产物管理

构建产物不应与源码混在一起长期提交。CI 可以:

  • 为每次 Release 生成带版本和提交号的产物名;
  • 保存 HAP/App、符号映射和测试报告;
  • 对产物计算 SHA-256;
  • 设置保留期限与访问权限;
  • 记录使用的 SDK、依赖锁文件和签名证书版本。

这样出现线上问题时才能重建完全一致的包。

十二、总结 ✨

HarmonyOS 工程从可运行到可发布,需要补齐一整套工程边界:

  • 理解应用级和模块级构建配置;
  • 同时验证 Debug 与 Release;
  • 版本、权限、资源和路由保持一致;
  • 签名凭据通过安全渠道注入;
  • 混淆只用于代码保护,不能替代秘密治理;
  • Debug 模拟能力必须在 Release 关闭;
  • 依赖、包体、日志和产物都纳入门禁。

发布工程最重要的原则很朴素:凡是进入客户端、仓库、日志或文章的内容,都要假设最终可能被公开看到。📦


推荐标签:HarmonyOSOpenHarmonyHvigorHAP应用签名安全发布

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询