7909cf2b22
test:导出脚本增加零漏拷/零多拷硬保证
...
质疑"某个目录有没有被打进 zip"时, 原先只能人工逐目录核对。现在把这个检查做进
脚本, 每次导出都跑:
copyDir 记录每个被复制文件在 zip 中应有的条目名, verifyZipFile 把它与实际 zip
条目做**逐个双向比对** —— 少一个报"漏拷"并列出文件名, 多一个报"多拷"。这样
漏拷会当场失败, 而不是等在别的电脑上解压缩时才发现。
自检输出新增一行, 例如:
自检: 零漏拷 ✅ (1381/1381) / CRC 逐条 ✅ / 偏移一致 ✅ / ...
同时把 copyDir 的条目名拼接由"从 nameOfParent 反推"改为显式传 relBase, 去掉
原先那段绕的 split/map 逻辑。
新增 3 条测试(漏拷拒绝 / 多拷拒绝 / 清单吻合时放行且 README.txt 豁免), 本
测试文件 19/19 通过, npm test 全量 17 个测试文件通过。
2026-10-17 16:13:09 +08:00
336b4d21da
test:鸿蒙工程包导出增加产出自检与单元测试
...
手写 ZIP 编码器的典型 bug 都是静默的 —— 包能生成、看着正常, 但某些机器上
解不开或解出畸形路径。开发期已真实踩过两次(中央目录偏移漏算文件数据长度、
localOffset 记成数据区起点), 两次都只有靠 unzip -t 才发现, 因此加两层保障。
一、脚本内产出自检 (每次导出都跑)
新增 verifyZipFile(), 把写好的 zip 重新解析一遍, 任一项不符直接抛错、不输出
「完成」。刻意用独立解析实现, 不复用写入端逻辑, 避免自证其说:
- EOCD / 中央目录: 签名、条目数、偏移与长度边界一致
- localOffset: 每条必须真的指向本地文件头, 且文件名与中央目录一致
- CRC: 逐条解压后重算 CRC32 比对
- 条目名: 必须正斜杠、必须置 UTF-8 标志位、必须可逆解码为合法 UTF-8
- 内容断言: 必需文件齐全; node_modules/build/.preview 等排除项不得混入
二、单元测试 tests/pack-harmony-project.test.js (16 条)
正向用例写夹具目录打包再独立解析还原, 校验内容/目录/中文名/零字节/空目录/
可压缩与不可压缩内容; 反向用例故意篡改 zip 断言自检能抓到 —— 反向用例一旦
失效自检就形同虚设, 故必须保持通过。
过程中自检抓到自身一条误判: 排除校验原先用子串匹配, 把合法源码
entry/src/ohosTest/ets/test/Ability.test.ets 当成 .test 构建产物。已改为按
路径分段精确匹配, 并加了一条反向用例锁定。
同时修掉两个隐患: stats 是模块级累加器(同进程重复调用会翻倍), main() 原先
无条件执行(require 脚本就会跑一遍打包), 现加 require.main 守卫并导出内部
实现供测试使用。
已验证: 本测试文件 16/16 通过, npm test 全量 17 个测试文件通过, 实打包
2.99MiB 包自检通过且 unzip -t 交叉验证无错误。
2026-10-17 14:42:28 +08:00
77b1a3372c
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 规避工具编码差异。
2026-10-17 14:19:54 +08:00
373db1fb73
docs:修正鸿蒙产物构成描述(1 HAP + 5 HSP)
...
原描述「共 6 个 HAP」不准确。module.json5 中 type: "entry" 编成 HAP,
type: "shared" 编成 HSP(共享包, 动态下发), 本工程实际是 1 个 HAP + 5 个 HSP。
同步修正:
- 两步流程描述改为「逐个 module 编译出包, 再打成 APP」, 产物路径扩展名
改为 {hap|hsp}
- 包列表新增扩展名列, 标明哪些是 .hap、哪些是 .hsp
- 单模块调试说明改为「只产出分包、不打 APP」
另补充实测体积: 主包 entry-default.hap 约 2.37 MiB(超官方单包 2MB 限制),
总包约 6.39 MiB(在 10MB 以内)。
2026-10-17 13:55:54 +08:00
550ec72bb7
fix:麦克风权限 Permissions 类型用法修正
...
上一提交写成 Permissions.MICROPHONE 导致 CompileArkTS 失败:
'Permissions' only refers to a type, but is being used as a value here
Permissions 在 @ohos.permissions 中是 export type 字符串联合类型, 不是枚举,
只能用在类型位置。改为类型标注 + 权限名字面量:
const PERMISSION_MICROPHONE: Permissions = 'ohos.permission.MICROPHONE';
注意 abilityAccessCtrl 里的 SwitchType.MICROPHONE(=1) 是开关类型枚举,
与权限名无关, 容易误用。
readme 4.3.3 补充该类型坑说明。
2026-10-17 11:53:44 +08:00
9086f1665c
feat:鸿蒙元服务接入麦克风运行时权限申请
...
MICROPHONE 是 user_grant 权限, 上一提交补了 module.json5 的 reason 只解决
了编译校验, 运行时仍需弹窗申请, 否则录音功能不可用。
在 EntryAbility.onCreate 中调用 abilityAccessCtrl.requestPermissionsFromUser。
关键点:
- AscfUIAbility 父类已定义 onCreate, 重写时必须调 super.onCreate(want,
launchParam), 否则跳过 ascf runtime 初始化导致元服务白屏
- 选 onCreate 而非按需触发: 权限状态在 JS 侧 (uni.getRecorderManager) 读不到,
项目无现成 JS<->ArkTS 通道; 且 requestPermissionsFromUser 对已授权应用
直接 resolve 不弹窗, 实际只有首次启动打扰用户一次
- 降级: 未授权不影响浏览/下单/卡片, 仅语音不可用, 前端 voice-panel 会
showToast 提示
readme 4.3.3 补充该实现与踩坑说明, 4.3.4 移除已解决项。
2026-10-17 11:46:57 +08:00
53b5b725a5
docs:鸿蒙元服务发布独立为 4.3 章节
...
原先作为 4.1.2 嵌在「小程序发布」下,实际产出的是 atomicService 元服务包,
与小程序流程差异较大,拆为独立的 4.3 章节,排在 4.2 快应用之后。
新增 4.3.2 DevEco Studio 编译与产物:说明 assembleApp 是两步串联
(先编译 HAP,再打包成 APP),列出 HAP / APP 产物路径与 pack.info 中
6 个 HAP 的构成,并注明元服务上架 AppGallery Connect 上传的是 .app。
新增 4.3.3 常见错误:hvigor 00303218 Configuration Error 的成因与修法
(user_grant 权限必须同时声明 reason 和 usedScene),附 user_grant /
system_grant 权限速查表。
新增 4.3.4 待完善:运行时权限申请未接入、release 签名仍指向 debug 证书。
2026-10-17 11:35:38 +08:00
7c703ace4f
docs: 更新README文档,补充鸿蒙小程序发布流程
...
1. 给原有章节标题增加了多余的井号修正为正确层级
2. 新增鸿蒙小程序发布完整流程章节
3. 更新版本特性和构建脚本说明,新增极限压缩优化、harmony.patch.js等内容
2026-05-27 18:15:55 +08:00
dee2887026
docs: 更新 readme 反映 H5 自动 ZIP 打包和统一配置方式
2026-05-11 11:56:37 +08:00
79202c4542
docs: 更新 package.json 和 readme.md 反映最新构建流程
2026-05-11 10:18:47 +08:00
d8e75a0c9e
chore:
2026-04-21 14:15:46 +08:00
09e410df00
docs: 更新readme文档结构和内容
...
重构readme文档结构,使用更清晰的markdown格式和emoji图标
添加详细的开发调试说明和发布流程
补充构建脚本说明和版本历史记录
2026-01-24 17:40:40 +08:00
Zhukj
2a1f33323c
chore:修改readme.md小程序和快应用发布说明文档
2026-01-24 16:51:31 +08:00
Zhukj
b441c46993
chore:更新小程序发布说明文档
2026-01-24 11:19:53 +08:00
c1d887a2e1
chore(doc): 将小程序的发布的文档变更一下,提供如何输出构建包
2025-10-31 13:58:09 +08:00
6673a494cf
fix(ui): 支持首页点击搜索按钮或者搜索框进入登录页面及优化构建输出微信小程序
2025-10-31 11:14:59 +08:00
66bf2504e0
chore: 配置更新
2025-10-30 09:17:54 +08:00
b56a977f2b
fix(release): 添加发布到微信小程序的外部配置缺失文件,源代码的坑。
2025-10-28 11:40:14 +08:00