> hvigor Finished :entry:default@CompileArkTS... after 21 s 222 ms
> hvigor Finished :entry:default@PackageHap... after 411 ms
> hvigor Finished :entry:default@SignHap... after 1 s 678 ms
> hvigor BUILD SUCCESSFUL in 26 s 593 ms
34 tasks in total: 34 executed, 0 up-to-date
>>> 退出码:0
Error Code:10106102
Error Message:The device screen is locked during the application launch, unlock screen failed.
Error cause: The current mode is developer mode, and the screen cannot be unlocked automatically
power-shell wakeup、keyEvent Power 都只能点亮屏幕,有密码锁的情况下无法脚本化解锁。
后续自动化测试开始前,需要先手动解锁手机(或临时关闭锁屏密码)。
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
背景
用户 2026-10-29 提出:开发环境整体搬到 WSL,以后的编译等操作都在 WSL 内进行,
产物再单独 scp 回 Windows 使用。代码全部放 WSL,远程提交到远端仓库管理。
诉求(逐条)
/home/yongquan/code/下,远端沿用code.yangyq.net。cert/目录,按规范命名存放。现状(2026-10-29 探测结果)
yongquan@127.0.0.1:22(Windows 侧由wslrelay.exe转发),密钥~/.ssh/wsl_local。git可用,.gitconfig已配(laoyang / i@yangyq.net),~/.git-credentials已存 code.yangyq.net 凭据。node/npm/java/ohpm/hvigorw/hdc/ HarmonyOS SDK 全部没有,鸿蒙工具链为零。待验证的关键点
但下载中心是 SPA + 可能需登录,需确认能否在 WSL 内直接取得安装包。
runtimeOS为HarmonyOS、targetSdkVersion 26.0.0、compatibleSdkVersion 6.1.1(24),必须用与 DevEco Studio 26.0.0 匹配的 HarmonyOS SDK;纯 OpenHarmony SDK 可能不可替代。
验收标准
/home/yongquan/code/下两个仓库 clone 完成,git remote -v指向 code.yangyq.net,git log与 Windows 侧一致。hvigorw assembleHap能跑通并产出.hap(或明确给出不可行的根因证据)。cert/下证书齐全、命名规范、权限受控,签名配置在 WSL 内生效。为什么单独建单
开发环境迁移到WSL,独立可验收,与#29资源模块交互无关
进展 1(2026-10-29 11:45):环境探测结论
已完成
yongquan@127.0.0.1:22(Windows 侧wslrelay.exe转发),密钥~/.ssh/wsl_local。WSL2 / Ubuntu 26.04.1 LTS,内核 6.18.54.1,12 核 / 11G 内存 / 952G 可用。
/home/yongquan/code/FamilyBook(42aff02)、/home/yongquan/code/FamilyBook_harmonyos(fd3ea53),与 Windows 侧 commit 完全一致,git remote -v指向code.yangyq.net,WSL 内.git-credentials已可推送。/usr/lib/jvm/java-21-openjdk-amd64),符合官方对 26.0.0 的要求。commandline-tools-linux-x64-5.1.0.840.zip(华为云镜像
repo.huaweicloud.com/harmonyos/ohpm/5.1.0/,2.1G,SHA-256 已校验通过)。解压于
/home/yongquan/downloads/command-line-tools。实测版本:node 18.20.1 / hvigorw 5.18.5 / ohpm 5.1.3 —— hvigor、ohpm、node 在 WSL 内原生跑通。
🔴 卡点:SDK 版本不匹配,API 18 工具链编不了 API 26 工程
该镜像包自带的是 API 18 / 5.1.0.125 SDK,而工程是 API 26:
modelVersion(hvigor-config / oh-package)targetSdkVersioncompatibleSdkVersionAppScope/app.json5的buildVersion三层实测证据(不是推断):
modelVersion 26.0.0→00303028 Unsupported modelVersion of Hvigor 26.0.0. supported is 5.1.05.1.0→00303027 modelVersion 不一致(hvigor-config 5.1.0 vs oh-package 26.0.0)app.json5schema 拒绝:propertyNames不允许buildVersion,且
AppScope.app的枚举里没有工程用到的若干字段。结论:必须拿到与 DevEco Studio 26.0.0 配套的 Linux 版 Command Line Tools(26.0.0.x),
或与 API 26 匹配的 Linux SDK。用 API 18 硬编只能把源码降级,属于功能倒退,不做。
待决策
华为云镜像只到 5.1.0;26.0.0 的 Linux 包只在华为开发者下载中心
(
developer.huawei.com/consumer/cn/download/command-line-tools-for-hmos),且下载链接是带 2 小时有效签名的动态地址、页面为 SPA + 需登录,无法在 WSL 内脚本化取得。
需要人工下载一次,或确认是否有其他可用镜像。
进展 2(2026-10-29):编译验证结论 —— WSL 内暂时不可行,卡在 API 26 Linux 闭源 hms 包
一、已经拿下的部分(真跑通,不是推断)
yongquan@127.0.0.1:22+~/.ssh/wsl_local/home/yongquan/code42aff02/fd3ea53,与 Windows 一致21.0.12.1,/usr/lib/jvm/java-21-openjdk-amd64commandline-tools-linux-x64-5.1.0.840.zip2.1G,SHA-256 校验通过os/7.0-Release抽出,5 组件全26.0.0.38 / api 26,hdc -v=Ver: 3.2.0fmodelVersion校验通过cert/familybook/也就是说,工具链本身、SDK 元数据、hvigor 版本这三层全部打通了,
00303028/00303027/00303312都已清掉。二、🔴 最终卡点:缺 API 26 的 Linux 版闭源 hms 组件
工程
runtimeOS: HarmonyOS(不是 OpenHarmony),hvigor 因此强制要求 hmscore 组件,--debug明确打出:而公开渠道能拿到的 API 26 Linux SDK 只有 OpenHarmony 开源那一套,不含闭源 HMS。缺的具名库是:
libimage_transcoder_shared.so(报11201001 Failed to load library ... path invalid)三、三条路径全部实测排除(不是没找,是找过且排掉了)
① 华为云镜像没有 26.0.0 的 Linux 包
ohpm目录只到 5.1.0(API 18),没有 26.0.0 的落点。② 借 API 18 的 hms 库 → ABI 不兼容(硬崩,不是警告)
restool是 API 26 的,libimage_transcoder是 API 18 的,Skia 符号对不上。此外 API 18 那套hms/toolchains里根本没有 restool 二进制(API 18 的 restool 在 openharmony 侧)。③ 复用 Windows DevEco 26.0.0 的 SDK → 不可能,宿主二进制平台不同
Windows 侧
sdk/default/hms确实是26.0.0.105、api 26,但:717 个
.so里没有一个是 x86_64-linux 宿主侧可执行文件。 Windows SDK 无法在 WSL 里跑,这不是配置问题。④ 退到纯
runtimeOS: OpenHarmony→ 同样被拦hvigor 的
getInCompatibleComponents()仍把组件判为不兼容。且工程大量使用 API 26 专有特性(@ComponentV2、AppScope.buildVersion、targetSdkVersion "26.0.0"字符串格式),降级属功能倒退,已被否掉。四、唯一出路(需要人工介入一次)
到华为开发者下载中心取 Linux 版 Command Line Tools 26.0.0.x:
该包自带完整 hms(含 Linux 版
libimage_transcoder_shared.so与restool),一次到位。之所以必须人工:下载页是 Angular SPA + 需登录,直链带 2 小时有效签名,无法在 WSL 内脚本化取得。
拿到后放进 WSL(
/home/yongquan/downloads/),我继续做完:签名配置接入 →hvigorw assembleHap→ 产物 scp 回 Windows → 补构建文档 → 关单。五、⚠️ 一条硬纪律(避免假通过)
在拿到 API 26 Linux hms 之前,不要再尝试伪造或跨版本拼接 SDK。
已经证明这条路会造成两种恶果:要么被 hvigor 拦下报错(好结果),
要么假通过后产物签不出/装不上(坏结果)。本次已把所有拼接尝试的副本删除干净,
/home/yongquan/downloads/sdk26/sdk/default/下只保留公开的 OpenHarmony 5 组件。六、证书规范化已交付(本单第 3 条验收项)
/home/yongquan/code/cert/familybook/,命名规则<bundle-name>.<用途>.<扩展名>:权限
700/600/644分层,.p12与.csr仅属主可读。p7b 内容已抽验:
type=debug、bundle-name=familybook.yangyq.net、有效期
1791727856 ~ 1823263856、device-ids为单设备绑定(
D5AB2387…7998,即当前这台真机)。七、结论
进展 3(2026-10-29):产物回流通道已打通并实测(本单第 4 条验收项)
脚本
/home/yongquan/code/tools/hap_export.sh(156→169 行,bash -n通过)为什么默认不走 scp
实测 WSL 内:
所以默认走
/mnt/d直写(零依赖,且能立刻 stat 到文件做逐字节校验),--via scp作为备用分支保留(需自行开 Windows sshd 并提供FB_WIN_HOST/FB_WIN_USER/FB_WIN_DEST)。落点
刻意放在仓库之外:不污染
git status,也不受.gitignore约束。实测记录(4 组,含反证)
① 无产物 → 必须 exit 2,不能静默通过 ✅
② --dry-run → 只列不搬 ✅ 退出码 0,未产生任何写入。
③ 真实搬运 + Windows 侧独立校验 ✅
两侧各自独立算 sha256,完全一致:
4e427032aa039eba60436f6ab564c0c299cf92635188ff2c2c8a3ddd34288cf14e427032aa039eba60436f6ab564c0c299cf92635188ff2c2c8a3ddd34288cf1不是只信脚本的自我报告,是在 Windows 侧重新
sha256sum出来的。④ 反证:篡改落地文件后判据能检出 ✅
⑤ 同名产物不互相覆盖 ✅
造了两个不同内容、同名的
entry-default.hap(模拟 debug/release 撞名):两份都完整保留。文件名带相对路径前缀解决了这个坑。
退出码约定
清理
所有测试产物、
entry/build/、D:\...\_harmonyos-builds\下的假包、脚本.bak均已删除,git status --porcelain为空。不会给日后留下假产物混淆。文档
已写
wsl-harmonyos-build.md:入口、环境变量、build 命令、证书路径映射、回流用法、退出码、以及第七节的阻塞说明与「禁止拼接 SDK」纪律。
本单状态小结
assembleHap跑通cert/证书规范 + 权限受控🔴 唯一未完成项是第 2 条,且是外部授权分发限制,不是方案缺陷。
需要人工提供
commandline-tools-linux-x64-26.0.0.851.zip后才能继续。🎉 进展 4(2026-10-29 16:16):WSL 内编译已打通,签名 HAP 产出并验签通过
用户 16:06 放入
commandline-tools-linux-x64-26.0.0.851.zip,从此前的「不可行」直接翻转为「完全可用」。这是对本单进展 2 结论的推翻与替代,以本节为准。
一、工具链到位
unzip -t全量校验No errors detected;解压后 7.1G。hms/toolchains/lib/libimage_transcoder_shared.so—— x86-64 ELF,82KB,确实存在。先单独验证了这个库能否真被加载(上次就崩在这):
这一步是关键——证明它不再需要借 API 18 的库做 ABI 拼接。
二、编译结果
34 个 task 全部执行、0 个 up-to-date —— 不是增量缓存蒙过去的。
之后又做了一次彻底干净重建(删掉
entry/build、build、.hvigor、oh_modules,模拟全新 clone):同样
34 executed, 0 up-to-date,退出码 0。三、签名验证(最关键的一步)
没有停在
BUILD SUCCESSFUL,因为构建日志通过 ≠ 产物有效。用官方工具验:证书链解析出来的主体就是本项目的开发者证书:
产物内
module.json实测值:四、🔴 遇到并解决的一个隐藏坑:
material/目录首次编译通过了 31 个 task,卡在最后一个签名步骤:
查
hvigor-ohos-plugin/src/utils/decipher-util.js找到根因:storePassword/keyPassword不是明文,是用密钥材料加密的 hex。hvigor 解密时会在storeFile的上一级目录里找material/,读fd/ac/ce三组密钥派生 AES-128-GCM key。因为我把三个证书路径都指到了
cert/familybook/,hvigor 就去那里找material,而
material原本在 Windows 的C:\Users\Yongquan\.ohos\config\material(DevEco 建证书时生成)。补上即可(
material是账号级材料,不随项目变,所有项目共用):权限已
chmod -R go-rwx(属主之外全禁)。这个目录必须严格保密,它 + 加密口令合起来等于证书私钥。
五、产物回流(沿用进展 3 的脚本,这次是真产物)
Windows 侧独立算 sha256 复核(不是只信 WSL 的自我报告):
4bad1a7870209f8c189a0c4a43b27566f3a0679d2c7057e5aa963fd4a2d6c028556103a48bc271209fb5ed3653f331e07b6b7b34d6f8d1a4edd7248522934fddWindows 侧
unzip -l能正常读出 45 个条目,文件未损坏。六、环境收敛
/home/yongquan/downloads/command-line-tools→ 软链到clt26/command-line-tools(26.0.0.851)command-line-tools.api18.bak(保留但不再使用)~/.workbuddy/env/harmonyos.sh重写:新增DEVECO_NODE_HOME、LD_LIBRARY_PATH(hms 的
.so依赖 openharmony previewer 的libskia_canvaskit.so等)、一键函数
build_hap [debug|release]build-profile.json5已指向cert/familybook/,targetSdkVersion: "26.0.0"七、工作区状态
八、本单验收项全部完成
assembleHap跑通并产出.hapcert/证书规范、权限受控、签名在 WSL 生效material/)wsl-harmonyos-build.md文档已重写,含全部踩坑与新解法。
剩余待办(不阻塞本单验收)
hdc install)——需要设备在线,且 p7b 的device-ids只绑定当前这台(
D5AB2387…7998),换机要重签 profile。build-profile.json5属机器相关配置,按.gitignore不入库。请确认后我关单;若想先在真机上装一遍确认可运行,我可以接着做
hdc那一步。进展 5(2026-10-29 20:35):真机安装首次成功,实测发现 1 个真实缺陷
手机上线后开始端到端实测。先报结论:安装、启动、界面渲染、交互全部正常;
但发现一个真实功能缺陷 —— 只读日历的日程在首页仍显示「编辑日程」按钮,点了必然报错。
一、设备与环境
5NC0225B27004718D5AB2387EA48A57D60BB2F139C36443367B41FEFB0DCCC6071C6FC95C1E77998🔴 UDID 与 p7b profile 里的
device-ids完全一致 ⇒ 签名绑定正确,可以安装。二、安装
bm dump -n familybook.yangyq.net能读到完整 applicationInfo,appIdentifier 6918744692675798335与 profile 的
app-identifier一致。三、运行验证(全部通过)
pidof= 43406,稳定运行,无 FATAL / jscrash 记录start ability successfully后台同步[foreground] 完成:12/12,耗时 3 秒、发现附件 248 个(新登记 4)FbFormAbility生命周期完整界面渲染(dumpLayout 取到的真实文字):
数据是真实业务数据(含农历、天气、课程表),不是占位。
四、交互验证
五、🔴 发现的真实缺陷:只读日历仍给「编辑日程」
日程「生成式人工智能」属于「工作学习」日历本,当前账号没有写权限。
但首页详情卡照样显示「编辑日程」,点进去能编辑,点保存才报错:
hvigor 日志侧同时留下:
根因(代码级):
FbHomePage.ets:1501把canEdit写死成true:而
FbEventSheet.ets:427只是照这个布尔值渲染按钮:对比日历页(同一件事做对了):
isEditableEvent()(Types.ets:640)的定义是:⚠️ 注意它只判了 kind/id/calId,没判
canWrite,所以即便照搬也还不够 ——真正要的是「这本日历我能不能写」。
FbCalBook上有现成的canWrite字段(
Types.ets:650,注释写着「我能不能写(Calendar::canWrite)」)。首页
canEdit: true是 v86 有意为之(注释记录了「打开编辑入口」的决定),那条决定本身没错 —— 错在没把"只读日历"排除掉。
建议修法(待确认后实施):首页把
canEdit改成this.evtBase !== null && isEditableEvent(this.evtBase) && 该日程所属日历的 canWrite,与日历页对齐,同时补上
canWrite判定;FbCalendarPage那处也一并补。六、🔴 另一个问题:需要人工解锁手机
测试到中途设备锁屏,
aa start报:power-shell wakeup、keyEvent Power都只能点亮屏幕,有密码锁的情况下无法脚本化解锁。后续自动化测试开始前,需要先手动解锁手机(或临时关闭锁屏密码)。
七、工具
新增
fb_device_probe.sh(真机端到端探测):screens列当前页全部文字与可点坐标、tap-text按文字点击、flow-edit跑完整编辑流程、shot截图。核心思路是每次点击前重新 dumpLayout 动态取坐标,
因为叠层时坐标会漂移,硬编码必然点错(本轮踩了多次)。
八、待办
用户验收通过,关单(2026-11-01)
用户 2026-11-01 明确回复「#30,可以关单了」。
五条验收项终态
/home/yongquan/code/{FamilyBook,FamilyBook_harmonyos},remote 指向 code.yangyq.netassembleHap跑通并产出 HAPcert/证书规范、权限受控、签名在 WSL 生效cert/familybook/700/600/644 分层;material/账号级材料已补齐tools/hap_export.sh,sha256 双侧独立校验一致,含 4 组反证wsl-harmonyos-build.md关键技术结论(留给以后)
commandline-tools-linux-x64-26.0.0.851.zip(含 x86-64 的libimage_transcoder_shared.so)。跨版本拼接 SDK 会造成「假通过后签不出/装不上」,已列入禁止项。
storePassword/keyPassword是加密 hex,hvigor 会在storeFile的上一级目录找
material/(fd/ac/ce三组密钥)派生 AES-128-GCM key。缺这个目录报00308018 ENOENT ... material。material是账号级材料,所有项目共用,必须严格保密。/mnt/d直写(Windows 侧没开 sshd),落点在仓库之外避免污染 git status。遗留(不属本单范围)
device-ids单设备绑定(当前这台 UDIDD5AB2387…7998),换机需重签 profile。