feat:一键导出鸿蒙工程包,支持换机编译
把 stub-app-projects/mp-harmony 中编译所需的文件导成 zip, 供没有本仓库/没有 HBuilderX 的电脑解压后直接用 DevEco 编译上传。 用法: npm run pack:harmony # 默认: 含证书, 不含 node_modules npm run pack:harmony -- --no-certs # 不含签名证书 npm run pack:harmony -- --with-node-modules # 含 hvigor/node_modules(320MB), 离线机 npm run pack:harmony -- --out <dir> # 自定义输出目录 输出 unpackage/dist/harmony-export/mp-harmony-project-*.zip, 内含一层 mp-harmony/。 实现要点: - 全程只读源目录: 先复制到暂存目录再压缩, 不修改 stub 下任何文件 - 采用「全量复制 - 排除清单」而非白名单, 避免漏掉新增必需文件 - 包含 ascf/ascf_src (uniapp 编译产物快照), 目标机因此无需本仓库和 HBuilderX - 包含 cert-profile 签名证书, 否则 hvigor 无法签名, 产不出可上传的 .app - 排除 node_modules(320M)/oh_modules/build/.preview(22M)/.idea/.hvigor/local.properties ZIP 由纯 Node 实现 (zlib + 手写 ZIP 头), 未用系统命令, 因为本机两种方案都产出 不合规 zip 且失败是静默的: - PowerShell Compress-Archive / ZipFile::CreateFromDirectory 写反斜杠条目名, 非 ZIP 规范, macOS/Linux 解压出畸形路径 - 本机 tar 是 GNU tar 1.35, 不支持创建 zip 且 exit 0, try/catch 拦不住 已验证: 解压后骨架齐全(AppScope/build-profile/entry/ascf_src/证书/README), 排除项均不存在, unzip -t 无错误, 中文文件名改 ASCII 规避工具编码差异。
This commit is contained in:
55
readme.md
55
readme.md
@@ -142,7 +142,54 @@ hvigorw --mode project -p product=default assembleApp
|
||||
|
||||
> 若只想单模块调试,可在 DevEco 中用「Build Hap(s)/Module(s)」(即 `assembleHap`),只产出分包、不打 APP。
|
||||
|
||||
#### 4.3.3 【常见错误】
|
||||
#### 4.3.3 【工程包导出(换机编译)】
|
||||
|
||||
需要在一台**没有本仓库 / 没有 HBuilderX** 的电脑上编译鸿蒙工程时,用脚本把 `stub-app-projects/mp-harmony` 里编译所需的文件导成一个 zip:
|
||||
|
||||
```bash
|
||||
npm run pack:harmony
|
||||
```
|
||||
|
||||
输出到 `unpackage/dist/harmony-export/mp-harmony-project-v<日期>-<提交ID>.zip`,解压后即得 `mp-harmony/` 目录。
|
||||
|
||||
| 参数 | 用途 |
|
||||
|------|------|
|
||||
| (无参数) | 默认行为:含签名证书,不含 `node_modules` |
|
||||
| `--no-certs` | 不含 `cert-profile/`(见下方安全提示) |
|
||||
| `--with-node-modules` | 额外含 `hvigor/node_modules`(约 320 MB),供**离线**目标机 |
|
||||
| `--out <目录>` | 自定义输出目录 |
|
||||
|
||||
**脚本全程只读源目录**,产物先复制到暂存目录再压缩,不修改 `stub-app-projects` 下任何文件。
|
||||
|
||||
**导出内容**
|
||||
|
||||
| 类别 | 说明 |
|
||||
|------|------|
|
||||
| 工程源码 | `AppScope/`、`entry/src/`、`ascf/ascf_build/*/src/`、各类 `*.json5` / `hvigorfile.ts` |
|
||||
| `ascf/ascf_src/` | uniapp 编译产物(页面/组件代码),**带上它目标机就不需要本仓库和 HBuilderX** |
|
||||
| `cert-profile/` | 签名证书(`--no-certs` 可排除) |
|
||||
|
||||
**已排除**(可由目标机 DevEco 重新生成)
|
||||
|
||||
`node_modules/`(约 320 MB)、`oh_modules/`、`**/build/`、`.preview/`(约 22 MB)、`.idea/`、`.hvigor/`、`local.properties`、`.cxx/`、`.test/`
|
||||
|
||||
> ⚠️ **证书安全**:默认导出**包含签名私钥** `cert-profile/qq/qq.p12`,且 p12 密码在 `build-profile.json5` 中本就是明文。请仅在可信渠道传递,用完及时销毁或归档。对外发给不可信对象时务必加 `--no-certs`。
|
||||
>
|
||||
> 📌 缺证书 hvigor 无法签名,产不出可上传的 `.app`。用 `--no-certs` 时需自行把 `cert-profile/` 放到目标工程对应位置。
|
||||
|
||||
**目标机操作**
|
||||
|
||||
1. 安装 DevEco Studio 5.0.x(本工程 `compatibleSdkVersion` 5.0.0(12))
|
||||
2. 解压 zip,得到 `mp-harmony/`
|
||||
3. DevEco Studio「打开」`mp-harmony` 目录本身
|
||||
4. 首次打开自动执行依赖同步(`ohpm install` 拉取 `hvigor/node_modules`),**需联网**;离线机请用 `--with-node-modules` 导出
|
||||
5. 「Build」→「Build App(s)/Project(s)」,产物 `build/outputs/default/mp-harmony-default-signed.app`
|
||||
|
||||
> ⚠️ **`ascf/ascf_src/` 是导出时刻的快照**。若前端代码有更新,必须回源机器重新执行导出,否则编译出的包内容是旧的。
|
||||
|
||||
📌 zip 由脚本内纯 Node 实现(`zlib` + 手写 ZIP 头)生成,条目名统一正斜杠并置 UTF-8 标志位,可跨 Windows/macOS/Linux 使用。
|
||||
|
||||
#### 4.3.4 【常见错误】
|
||||
|
||||
**❌ `hvigor ERROR: 00303218 Configuration Error`**
|
||||
```
|
||||
@@ -216,17 +263,17 @@ onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
|
||||
|
||||
📌 用户拒绝后的降级:不影响浏览/下单/卡片等其他功能,仅语音输入不可用;[ai-chat-voice-panel.vue](pages_tool/ai-chat/components/ai-chat-voice-panel.vue) 会 catch 到 recorder 错误并 `showToast` 提示用户。
|
||||
|
||||
#### 4.3.4 【待完善】⚠️
|
||||
#### 4.3.5 【待完善】⚠️
|
||||
- **release 签名仍指向 debug 证书**:`build-profile.json5` 中 `release` 签名的 `profile` 仍是 `./cert-profile/qq/qqDebug.p7b`,与 `default`(debug)共用同一份证书。本地调试无碍,但提交 AppGallery 前必须换成**发布证书 + release 类型 provisioning profile**,否则 AGC 校验会直接拒绝。
|
||||
|
||||
#### 4.3.5 【交付与最终发布】🔍
|
||||
#### 4.3.6 【交付与最终发布】🔍
|
||||
1. 将生成的 `.zip` 文件发送给运维人员
|
||||
2. **运维人员操作流程**:
|
||||
- 解压压缩包
|
||||
- 打开鸿蒙开发者工具,导入解压后的代码目录
|
||||
- 验证代码无报错后,执行上传发布操作
|
||||
|
||||
#### 4.3.6 【本地设置】
|
||||
#### 4.3.7 【本地设置】
|
||||

|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user