鸿蒙 PC Markdown 编辑器构建交付Debug、Release HAP 与哈希校验应用在 DevEco中能运行不等于已经形成可重复交付。OhMarkdown同时包含 ArkTS原生代码和 Vite Web内核构建顺序必须先生成离线 HTML再由 Hvigor打入 HAPDebug、Release、测试构建、签名状态、产物大小和哈希都要分别记录。本文说明鸿蒙 PC项目的双构建链、API 24配置、单文件资源、Release unsigned HAP和 SHA-256校验。代码位于 https://gitcode.com/VON-/codex_md_oh对应提交3a9146e。两套工具链组成一个产物Web层TypeScript、CodeMirror、markdown-it、DOMPurify和 CSS经 Vite生成entry/src/main/resources/rawfile/editor/index.html原生层ArkTS、资源、module.json5和 rawfile经 Hvigor生成 HAP。若只运行 assembleHap而没有先构建 Web包里可能是旧 HTML若只运行 Vite得到的也不是鸿蒙应用。构建脚本把顺序固化避免依赖开发者记忆。Web 构建输出到原生资源exportdefaultdefineConfig({base:./,plugins:[viteSingleFile()],build:{outDir:../entry/src/main/resources/rawfile/editor,emptyOutDir:true,sourcemap:false,target:es2020,chunkSizeWarningLimit:800}});base: ./让资源相对本地页面singlefile把 JS/CSS内联ArkWeb不需要外部文件或网络emptyOutDir删除旧产物避免废弃 chunk残留Release不带 sourcemap减少包体和源码暴露。构建目标 ES2020与当前 ArkWeb能力匹配升级目标前需在 API 24设备验证。build-editor 作为前置步骤Debug与 Release脚本都先执行$(dirname--$0)/build-editor.shbuild-editor进入 web-editor并运行 npm buildTypeScript--noEmit先检查类型再 Vite写 rawfile。任何失败因set -eu中止不会继续打包含旧资源的 HAP。生产测试还读取最终 index.html断言没有外部 script和 stylesheet。构建成功与离线约束同时进入门禁。DevEco 环境显式配置DEVECO_HOME${DEVECO_HOME:-/Applications/DevEco-Studio.app/Contents}exportJAVA_HOME${JAVA_HOME:-$DEVECO_HOME/jbr/Contents/Home}exportDEVECO_SDK_HOME${DEVECO_SDK_HOME:-$DEVECO_HOME/sdk}默认使用 DevEco附带 JBR和 SDK减少系统 Java差异CI或其他机器可以覆盖。脚本不把个人 SDK路径写进仓库 local.properties。构建日志要记录 DevEco、Hvigor和 SDK版本。仅记录“macOS”不足以复现工具链。产品与 SDK 配置{ name: default, signingConfig: default, targetSdkVersion: 6.1.1(24), compatibleSdkVersion: 6.1.1(24), runtimeOS: HarmonyOS, buildOption: { strictMode: { caseSensitiveCheck: true, useNormalizedOHMUrl: true } } }目标和兼容均 API 24。严格大小写检查避免 macOS文件系统上可用、目标环境因路径大小写失败规范 OHM URL减少模块引用差异。buildModeSet明确 debug和 release。entry目标还包含 ohosTest主模块和测试模块使用同一产品基线。Debug 构建exec$DEVECO_HOME/tools/hvigor/bin/hvigorw\assembleHap\--modemodule\-pproductdefault\-pmoduleentrydefault\-pbuildModedebug\--no-daemonDebug用于快速安装模拟器、HDC调试和功能验证。exec让 Hvigor退出码成为脚本退出码--no-daemon降低不同运行残留状态代价是每次启动成本。Debug通过证明 ArkTS、资源和 Web产物可以组装不代表 Release优化路径通过。Release 构建Release只切换-pbuildModereleaseentry release配置当前关闭 Ark混淆arkOptions: { obfuscation: { ruleOptions: { enable: false, files: [ ./obfuscation-rules.txt ] } } }Alpha阶段优先调试与可诊断。正式发布前应启用并验证混淆特别是 JavaScript Proxy方法名、反射资源和序列化字段不能被错误改名。unsigned 不是发布包根配置signingConfigs为空最终文件名为entry-default-unsigned.hap。它可用于构建、体积和部分安装验证但不能宣称完成商店签名与发布。签名需要证书、profile、密钥保护和流水线密钥策略。不能把私钥提交仓库也不能在文章中暴露本机证书路径。后续发布门禁应验证签名主体、有效期和权限。产物大小与哈希最终 Release unsigned HAP记录size: 1006605 bytes sha256: 6d08d725bcb219ae97508281477cedb40d766d6860d7062e14d873f30322e31cSHA-256把测试报告与具体二进制绑定。文件名可被覆盖哈希能确认用户拿到的是同一产物。大小用于观察依赖和资源增长不作为唯一优化目标。每次正式基线应记录 commit、命令、环境、HAP相对路径、字节和哈希。重新构建若哈希不同可能来自时间戳或非确定打包需要区分可重复构建与内容一致。UnitTestBuildhvigorw UnitTestBuild\--modemodule\-pproductdefault\-pmoduleentrydefault\-pbuildModetest\-punitTestModetrue\--no-daemon该任务编译测试代码和依赖捕获 ArkTS类型、Hypium引用和测试资源问题。它不代表设备执行4/4报告必须单列。测试模块声明2in1让目标类型与 PC优先策略一致。未来 phone只是兼容不应稀释 PC构建门禁。构建产物安全检查Web index不引用 CDNArkWeb关闭 file、online image、geolocation和 DOM storageRelease无 sourcemap。HAP还应进一步扫描意外密钥、绝对路径、调试日志、测试 fixture、source map和未使用资源。依赖许可证与 SBOM是做大后的必要交付项。package-lock和 oh-package-lock应进入版本管理构建报告记录依赖版本。鸿蒙 PC Release 版本下图来自 MateBook Pro 2in1模拟器中的构建基线。ArkUI外壳和离线 Web编辑器来自同一 HAP构建链。截图证明应用可运行不证明签名和商店发布。HAP哈希、构建日志、自动化和设备行为共同形成交付证据。包体增长管理单 HTML包含 CodeMirror、markdown-it、DOMPurify和 CSS是主要资源之一。新增插件前记录 HAP与 index.html差值。chunkSizeWarningLimit只是构建警告阈值不是产品预算。可建立预算Web资源、HAP总大小、冷启动时间和内存共同评估。为了减几十 KB删除安全净化库是错误优化先分析 source map、重复依赖和未用语言包。可重复构建真正可重复需要固定 Node、npm、DevEco、SDK、Hvigor、系统环境与 lockfile。当前脚本固定路径和依赖锁但尚未证明两次构建字节哈希完全一致。HAP元数据可能含时间。可先比较解包后业务文件哈希确认内容一致再研究打包时间戳归一。不要在没有验证时宣称 reproducible build。交付前门禁Release候选至少需要Web 20/20、ohosTest 4/4、Debug/Release/UnitTestBuild成功、diff检查、模拟器主链、HAP大小与哈希、安全扫描、签名验证和 Alpha退出条件。当前签名、远程 CI和内部试用未完成所以仍是工程基线而非正式发布。当前边界无发布签名混淆关闭原生构建只在本机 macOS未生成 SBOM未验证字节级可重复构建没有自动上传产物和发布渠道。API 24之外兼容矩阵尚未建立。产物回溯规则每个准备交付的 HAP应配套一个本地清单记录 Git提交、工作区是否干净、Web lockfile哈希、oh-package lockfile哈希、DevEco版本、SDK版本、构建模式、文件字节和 SHA-256。若工作区存在未提交代码产物不能只绑定 HEAD因为二进制可能包含无法从仓库重建的修改。清单还应记录验证报告路径和模拟器目标不把测试截图塞进 HAP。以后引入自动发布时流水线从同一 commit生成清单和 artifact下载页面显示哈希。用户反馈问题时先收集应用版本和构建 id不要求用户上传文档。Release目录中的旧 HAP应在新构建前清理或按 commit归档避免人工拿错文件。文件名包含 product、module、mode仍不够区分两次构建哈希才是最终身份。结语OhMarkdown构建链先把 Web变成离线单 HTML再由 Hvigor按 API 24组装 Debug、Release和测试目标。脚本固定环境与顺序最终 unsigned HAP记录大小和 SHA-256同时明确它不是签名发布包。鸿蒙 PC应用的交付质量来自可重复命令和可核对产物而不是 DevEco里一次成功运行。把构建、测试、签名和发布逐层命名才能让后续团队与渠道建立可靠流程。
鸿蒙 PC Markdown 编辑器构建交付:Debug、Release HAP 与哈希校验
鸿蒙 PC Markdown 编辑器构建交付Debug、Release HAP 与哈希校验应用在 DevEco中能运行不等于已经形成可重复交付。OhMarkdown同时包含 ArkTS原生代码和 Vite Web内核构建顺序必须先生成离线 HTML再由 Hvigor打入 HAPDebug、Release、测试构建、签名状态、产物大小和哈希都要分别记录。本文说明鸿蒙 PC项目的双构建链、API 24配置、单文件资源、Release unsigned HAP和 SHA-256校验。代码位于 https://gitcode.com/VON-/codex_md_oh对应提交3a9146e。两套工具链组成一个产物Web层TypeScript、CodeMirror、markdown-it、DOMPurify和 CSS经 Vite生成entry/src/main/resources/rawfile/editor/index.html原生层ArkTS、资源、module.json5和 rawfile经 Hvigor生成 HAP。若只运行 assembleHap而没有先构建 Web包里可能是旧 HTML若只运行 Vite得到的也不是鸿蒙应用。构建脚本把顺序固化避免依赖开发者记忆。Web 构建输出到原生资源exportdefaultdefineConfig({base:./,plugins:[viteSingleFile()],build:{outDir:../entry/src/main/resources/rawfile/editor,emptyOutDir:true,sourcemap:false,target:es2020,chunkSizeWarningLimit:800}});base: ./让资源相对本地页面singlefile把 JS/CSS内联ArkWeb不需要外部文件或网络emptyOutDir删除旧产物避免废弃 chunk残留Release不带 sourcemap减少包体和源码暴露。构建目标 ES2020与当前 ArkWeb能力匹配升级目标前需在 API 24设备验证。build-editor 作为前置步骤Debug与 Release脚本都先执行$(dirname--$0)/build-editor.shbuild-editor进入 web-editor并运行 npm buildTypeScript--noEmit先检查类型再 Vite写 rawfile。任何失败因set -eu中止不会继续打包含旧资源的 HAP。生产测试还读取最终 index.html断言没有外部 script和 stylesheet。构建成功与离线约束同时进入门禁。DevEco 环境显式配置DEVECO_HOME${DEVECO_HOME:-/Applications/DevEco-Studio.app/Contents}exportJAVA_HOME${JAVA_HOME:-$DEVECO_HOME/jbr/Contents/Home}exportDEVECO_SDK_HOME${DEVECO_SDK_HOME:-$DEVECO_HOME/sdk}默认使用 DevEco附带 JBR和 SDK减少系统 Java差异CI或其他机器可以覆盖。脚本不把个人 SDK路径写进仓库 local.properties。构建日志要记录 DevEco、Hvigor和 SDK版本。仅记录“macOS”不足以复现工具链。产品与 SDK 配置{ name: default, signingConfig: default, targetSdkVersion: 6.1.1(24), compatibleSdkVersion: 6.1.1(24), runtimeOS: HarmonyOS, buildOption: { strictMode: { caseSensitiveCheck: true, useNormalizedOHMUrl: true } } }目标和兼容均 API 24。严格大小写检查避免 macOS文件系统上可用、目标环境因路径大小写失败规范 OHM URL减少模块引用差异。buildModeSet明确 debug和 release。entry目标还包含 ohosTest主模块和测试模块使用同一产品基线。Debug 构建exec$DEVECO_HOME/tools/hvigor/bin/hvigorw\assembleHap\--modemodule\-pproductdefault\-pmoduleentrydefault\-pbuildModedebug\--no-daemonDebug用于快速安装模拟器、HDC调试和功能验证。exec让 Hvigor退出码成为脚本退出码--no-daemon降低不同运行残留状态代价是每次启动成本。Debug通过证明 ArkTS、资源和 Web产物可以组装不代表 Release优化路径通过。Release 构建Release只切换-pbuildModereleaseentry release配置当前关闭 Ark混淆arkOptions: { obfuscation: { ruleOptions: { enable: false, files: [ ./obfuscation-rules.txt ] } } }Alpha阶段优先调试与可诊断。正式发布前应启用并验证混淆特别是 JavaScript Proxy方法名、反射资源和序列化字段不能被错误改名。unsigned 不是发布包根配置signingConfigs为空最终文件名为entry-default-unsigned.hap。它可用于构建、体积和部分安装验证但不能宣称完成商店签名与发布。签名需要证书、profile、密钥保护和流水线密钥策略。不能把私钥提交仓库也不能在文章中暴露本机证书路径。后续发布门禁应验证签名主体、有效期和权限。产物大小与哈希最终 Release unsigned HAP记录size: 1006605 bytes sha256: 6d08d725bcb219ae97508281477cedb40d766d6860d7062e14d873f30322e31cSHA-256把测试报告与具体二进制绑定。文件名可被覆盖哈希能确认用户拿到的是同一产物。大小用于观察依赖和资源增长不作为唯一优化目标。每次正式基线应记录 commit、命令、环境、HAP相对路径、字节和哈希。重新构建若哈希不同可能来自时间戳或非确定打包需要区分可重复构建与内容一致。UnitTestBuildhvigorw UnitTestBuild\--modemodule\-pproductdefault\-pmoduleentrydefault\-pbuildModetest\-punitTestModetrue\--no-daemon该任务编译测试代码和依赖捕获 ArkTS类型、Hypium引用和测试资源问题。它不代表设备执行4/4报告必须单列。测试模块声明2in1让目标类型与 PC优先策略一致。未来 phone只是兼容不应稀释 PC构建门禁。构建产物安全检查Web index不引用 CDNArkWeb关闭 file、online image、geolocation和 DOM storageRelease无 sourcemap。HAP还应进一步扫描意外密钥、绝对路径、调试日志、测试 fixture、source map和未使用资源。依赖许可证与 SBOM是做大后的必要交付项。package-lock和 oh-package-lock应进入版本管理构建报告记录依赖版本。鸿蒙 PC Release 版本下图来自 MateBook Pro 2in1模拟器中的构建基线。ArkUI外壳和离线 Web编辑器来自同一 HAP构建链。截图证明应用可运行不证明签名和商店发布。HAP哈希、构建日志、自动化和设备行为共同形成交付证据。包体增长管理单 HTML包含 CodeMirror、markdown-it、DOMPurify和 CSS是主要资源之一。新增插件前记录 HAP与 index.html差值。chunkSizeWarningLimit只是构建警告阈值不是产品预算。可建立预算Web资源、HAP总大小、冷启动时间和内存共同评估。为了减几十 KB删除安全净化库是错误优化先分析 source map、重复依赖和未用语言包。可重复构建真正可重复需要固定 Node、npm、DevEco、SDK、Hvigor、系统环境与 lockfile。当前脚本固定路径和依赖锁但尚未证明两次构建字节哈希完全一致。HAP元数据可能含时间。可先比较解包后业务文件哈希确认内容一致再研究打包时间戳归一。不要在没有验证时宣称 reproducible build。交付前门禁Release候选至少需要Web 20/20、ohosTest 4/4、Debug/Release/UnitTestBuild成功、diff检查、模拟器主链、HAP大小与哈希、安全扫描、签名验证和 Alpha退出条件。当前签名、远程 CI和内部试用未完成所以仍是工程基线而非正式发布。当前边界无发布签名混淆关闭原生构建只在本机 macOS未生成 SBOM未验证字节级可重复构建没有自动上传产物和发布渠道。API 24之外兼容矩阵尚未建立。产物回溯规则每个准备交付的 HAP应配套一个本地清单记录 Git提交、工作区是否干净、Web lockfile哈希、oh-package lockfile哈希、DevEco版本、SDK版本、构建模式、文件字节和 SHA-256。若工作区存在未提交代码产物不能只绑定 HEAD因为二进制可能包含无法从仓库重建的修改。清单还应记录验证报告路径和模拟器目标不把测试截图塞进 HAP。以后引入自动发布时流水线从同一 commit生成清单和 artifact下载页面显示哈希。用户反馈问题时先收集应用版本和构建 id不要求用户上传文档。Release目录中的旧 HAP应在新构建前清理或按 commit归档避免人工拿错文件。文件名包含 product、module、mode仍不够区分两次构建哈希才是最终身份。结语OhMarkdown构建链先把 Web变成离线单 HTML再由 Hvigor按 API 24组装 Debug、Release和测试目标。脚本固定环境与顺序最终 unsigned HAP记录大小和 SHA-256同时明确它不是签名发布包。鸿蒙 PC应用的交付质量来自可重复命令和可核对产物而不是 DevEco里一次成功运行。把构建、测试、签名和发布逐层命名才能让后续团队与渠道建立可靠流程。