原本鸿蒙开发在 Windows 侧(DevEco Studio + Git Bash + 本地 SDK)进行,现在开发环境整体搬到 WSL, 后续所有操作(拉代码、改代码、编译、提交推远端)都在 WSL 内完成。 Windows 侧只保留"取回编译产物"这一个动作。
具体四件事:
SyncCalendar
/home/yongquan/code/
hvigorw assembleHap
.hap
~/code/cert/
D:/Yongquan/DevEcoStudioProjects/sign/
synccalendarDebug.cer
synccalendar_Release.p7b
<bundle>.<用途>.<扩展名>
~/code/cert/familybook/
scp
build-profile.json5
.gitignore
storePassword
keyPassword
/
/sign/
*.p12
/hvigor/*
26.0.0.851
ohpm
hvigorw
hdc
/home/yongquan/code/SyncCalendar
git log
BUILD SUCCESSFUL
~/code/cert/synccalendar/
600
不需要 DevEco Studio。 WSL 内 assembleHap(debug)与 assembleApp(release)都跑通了, 从零全量重建也通过。唯一不能做的是模拟器与真机调试(hdc 对 Windows 侧设备不通用) 和图形 IDE 相关功能。
assembleHap
assembleApp
/home/yongquan/code/SyncCalendar clone 自 https://code.yangyq.net/laoyang/SyncCalendar.git 10 个 tag 齐全(v0.0.1 ~ v0.1.0) git rev-list --left-right --count origin/master...master → 0 0
命名规则 <包名>.<用途>.<扩展名>,与已有的 cert/familybook/ 同一风格:
<包名>.<用途>.<扩展名>
cert/familybook/
synccalendar.yangyq.net.p12
synccalendar_release
synccalendar.yangyq.net.debug.cer
…\,Development
synccalendar.yangyq.net.debug.p7b
648620fa-309b-487d-a85b-cf5d089a8e42
synccalendar.yangyq.net.release.cer
…\,Release
synccalendar.yangyq.net.release.p7b
3c28865b-7413-482e-8593-0aef8fb219e2
app_gallery
synccalendar.yangyq.net.csr
CN=synccalendar_release
material/
README.md
权限:目录 700、文件 600。全部在 git 仓库之外,.gitignore 的 *.p12/*.cer/*.p7b 等规则也不会误收纳。
700
*.cer
*.p7b
原 Windows 侧 D:\Yongquan\DevEcoStudioProjects\sign\ 原件保留未动。
D:\Yongquan\DevEcoStudioProjects\sign\
1. 口令字段必须是密文,且必须配 p12 同目录的 material/
build-profile.json5 没被 git 跟踪(.gitignore:33),clone 后是没有的,必须现造。 三种失败形态:
.gitignore:33
00303116 …length of the storePassword or keyPassword field is less than 32
00303242 Signature material verification failed, as: Unsupported state or unable to authenticate data
ENOENT: no such file or directory, stat '…/material'
storeFile
hvigor 只在 storeFile 同目录下找 material/,位置由 p12 路径决定,所以证书目录结构 必须保持 cert/synccalendar/{材料, material/} 这个形态。
cert/synccalendar/{材料, material/}
Windows 那份密文用现在的 material 解不开(早期生成密文时材料已换代)。 好在 p12 明文口令本身是好的(keytool -list 能正常打开、别名 synccalendar_release), 于是用现有 material 重新加密同一口令,SignHap 随即通过。
keytool -list
SignHap
相关工具已放到 ~/code/tools/pwd-tool.js(复刻 hvigor 的 DecipherUtil,带自检回解), 以后要改口令直接用它,不用再翻源码。
~/code/tools/pwd-tool.js
DecipherUtil
2. WSL → Windows 的 scp 不通
Windows 侧 sshd 22 端口未开放,"从 WSL 推到 Windows"这条路走不通。 解法是把方向反过来 —— 由 Windows 侧 scp wsl-local:... 本地路径 拉取, 不需要 Windows 开 sshd。已实测可用并做过双向 sha256 比对。
scp wsl-local:... 本地路径
648620fa…
"type":"debug"
3c28865b…
type:release
app-distribution-type: app_gallery
clean
pack.info
0.1.0
10000
back
产物:
SyncCalendar_v0.1.0_10000.app
entry-default-debug.hap
D:\Yongquan\code\_harmonyos-builds\synccalendar\20261029-172639\
必须先打 app 再打 hap。 release 流程会用 release 签名覆盖 entry/build/.../entry-default-signed.hap;此时如果直接取这个 hap, 拿到的是 release 签名版,装真机会报 9568322。 本次已重建 debug hap 后才取回,并确认 uuid 是 648620fa…。
app
hap
entry/build/.../entry-default-signed.hap
9568322
ssh wsl-local 'bash ~/code/tools/build-sc.sh hap' # 调试 hap ssh wsl-local 'bash ~/code/tools/build-sc.sh app' # 上架 app(自动切回 default 签名) ssh wsl-local 'bash ~/code/tools/build-sc.sh clean' # 清产物 # 取回产物(Windows 侧执行) scp -q wsl-local:"~/code/SyncCalendar/build/outputs/default/SyncCalendar-default-signed.app" <本地>
构建脚本、切换签名脚本、口令工具都放在 ~/code/tools/(仓库外), 不污染代码库,git status 保持干净。
~/code/tools/
git status
sf.html
sftp
No dependencies set.
The note is not visible to the blocked user.
现象 / 诉求
原本鸿蒙开发在 Windows 侧(DevEco Studio + Git Bash + 本地 SDK)进行,现在开发环境整体搬到 WSL,
后续所有操作(拉代码、改代码、编译、提交推远端)都在 WSL 内完成。
Windows 侧只保留"取回编译产物"这一个动作。
具体四件事:
SyncCalendarclone 到 WSL 的/home/yongquan/code/下,脱离 Windows 工作副本。WSL 是 Linux,DevEco Studio 的图形 IDE 用不上,只能走 command-line-tools。
需要确认:
hvigorw assembleHap能跑通、ArkTS 编译无错、能产出.hap。~/code/cert/下,正规命名存放——现状:证书散在 Windows 的
D:/Yongquan/DevEcoStudioProjects/sign/,文件名是随手起的(
synccalendarDebug.cer、synccalendar_Release.p7b大小写混杂)。目标:按
<bundle>.<用途>.<扩展名>的规范重命名,与~/code/cert/familybook/已有风格对齐。scp单独取回 Windows(WSL 内不落 Windows 路径依赖)。关键约束(迁移时必须处理)
build-profile.json5未被 git 跟踪(.gitignore锚定根目录),clone 下来是没有的,构建会直接失败。必须按 WSL 的证书路径重新生成一份。
storePassword/keyPassword是 DevEco 加密过的密文串,DevEco 之外无法解密。WSL 里不能用这两串,需要另想办法(明文口令 / 环境变量)。
.gitignore有 16 条/根锚定规则(/sign/、*.p12、/hvigor/*等)——证书绝不能放进仓库目录,否则有泄露风险。
26.0.0.851/ SDK API 26,与 Windows 侧 DevEco 版本要对得上,否则编译报错或产物不可用。
ohpm/hvigorw不在 PATH 里,需要显式配置。hdc对 Windows 侧设备不通用),本次只验证编译。验收标准
/home/yongquan/code/SyncCalendar存在,git log与远端一致,工作区干净。hvigorw assembleHap编译成功,BUILD SUCCESSFUL,产出签名后的.hap。~/code/cert/synccalendar/,命名规范、权限600、不在 git 仓库内。build-profile.json5在 WSL 内可用(路径指向 WSL 证书),且仍被.gitignore忽略、不入库。scp取回 Windows 可正常使用(体积、文件名正确)。✅ 验证完成:WSL 内可以完整编译鸿蒙应用
结论先说
不需要 DevEco Studio。 WSL 内
assembleHap(debug)与assembleApp(release)都跑通了,从零全量重建也通过。唯一不能做的是模拟器与真机调试(
hdc对 Windows 侧设备不通用)和图形 IDE 相关功能。
一、代码已迁入 WSL
二、证书已按规范收纳(
~/code/cert/synccalendar/)命名规则
<包名>.<用途>.<扩展名>,与已有的cert/familybook/同一风格:synccalendar.yangyq.net.p12synccalendar_releasesynccalendar.yangyq.net.debug.cer…\,Developmentsynccalendar.yangyq.net.debug.p7b648620fa-309b-487d-a85b-cf5d089a8e42synccalendar.yangyq.net.release.cer…\,Releasesynccalendar.yangyq.net.release.p7b3c28865b-7413-482e-8593-0aef8fb219e2,app_gallerysynccalendar.yangyq.net.csrCN=synccalendar_releasematerial/README.md权限:目录
700、文件600。全部在 git 仓库之外,.gitignore的*.p12/*.cer/*.p7b等规则也不会误收纳。原 Windows 侧
D:\Yongquan\DevEcoStudioProjects\sign\原件保留未动。三、迁移中踩的两个坑(都会卡住别人,记在这)
1. 口令字段必须是密文,且必须配 p12 同目录的
material/build-profile.json5没被 git 跟踪(.gitignore:33),clone 后是没有的,必须现造。三种失败形态:
00303116 …length of the storePassword or keyPassword field is less than 3200303242 Signature material verification failed, as: Unsupported state or unable to authenticate datamaterial/与加密时的不是同一套ENOENT: no such file or directory, stat '…/material'material/没放在storeFile同目录hvigor 只在
storeFile同目录下找material/,位置由 p12 路径决定,所以证书目录结构必须保持
cert/synccalendar/{材料, material/}这个形态。Windows 那份密文用现在的 material 解不开(早期生成密文时材料已换代)。
好在 p12 明文口令本身是好的(
keytool -list能正常打开、别名synccalendar_release),于是用现有 material 重新加密同一口令,
SignHap随即通过。相关工具已放到
~/code/tools/pwd-tool.js(复刻 hvigor 的DecipherUtil,带自检回解),以后要改口令直接用它,不用再翻源码。
2. WSL → Windows 的 scp 不通
Windows 侧 sshd 22 端口未开放,"从 WSL 推到 Windows"这条路走不通。
解法是把方向反过来 —— 由 Windows 侧
scp wsl-local:... 本地路径拉取,不需要 Windows 开 sshd。已实测可用并做过双向 sha256 比对。
四、实测结果
assembleHap(debug)648620fa…、"type":"debug"assembleApp(release)3c28865b…、type:release、app-distribution-type: app_galleryclean)pack.info=0.1.0/ code10000/ build 1 ✓backdeprecated 等 WARN产物:
SyncCalendar_v0.1.0_10000.app1,397,077 B(release 签名,上架用)entry-default-debug.hap3,521,404 B(debug 签名,真机装)D:\Yongquan\code\_harmonyos-builds\synccalendar\20261029-172639\五、⚠️ 一个顺序陷阱(重要)
必须先打
app再打hap。 release 流程会用 release 签名覆盖entry/build/.../entry-default-signed.hap;此时如果直接取这个 hap,拿到的是 release 签名版,装真机会报
9568322。本次已重建 debug hap 后才取回,并确认 uuid 是
648620fa…。六、后续操作方式
构建脚本、切换签名脚本、口令工具都放在
~/code/tools/(仓库外),不污染代码库,
git status保持干净。未覆盖的部分
sf.html等)仍走原有sftp流程,与本次迁移无关。