飞b6App开发
HarmonyOS 6
鸿蒙缓存逻辑
心系天下 "buildOption": {
"strictMode": {
"resource": {
"enableClean": true
}
}
}
}
修改资源文件后,手动删除 build/ 目录下的 intermediates/res 文件夹。
# 强制清理并全量构建
hvigor clean --daemon false
hvigor assembleHap --all-modules --daemon false
慢行
不羁的木木这种情况我一般会先怀疑“构建产物缓存”,不一定是手机里的应用缓存。
因为你在 IDE 里直接构建到真机已经验证 bug 消失,但 Git 提交后统一打包又出现,说明两条构建链路很可能拿到的代码或产物不完全一样。
重点排查这几个地方:
- 统一打包机器有没有
build、hvigor、模块产物缓存,增量编译可能继续用了旧产物。可以先做一次 clean build 验证。 - 检查统一打包实际 checkout 的 commit,确认修复代码真的已经包含进去,尤其是多分支、子模块或者 cherry-pick 的情况。
- 看统一打包的构建参数。比如 build profile、product、模块配置不同,可能实际编译的不是 IDE 测试的那套代码。
- 如果使用了三方库、HAR/HSP,重点检查有没有引用旧版本产物。源码已经改了,但依赖仍然指向旧 HAR/HSP,也会出现“本地好了,统一打包还是有问题”。
- 最后再查设备侧缓存。统一打包出来的新包安装时如果没有彻底覆盖旧数据,像数据库、Preferences、文件缓存这些业务数据仍然会保留。不过这种情况通常不会导致“代码 bug 又回来”,除非 bug 本身和持久化数据有关。
可以让 CI 每次正式构建先执行一次完整 clean,然后把最终产物的 commit ID、版本号、构建时间打印到日志里。这样很快就能判断到底是“打包用了旧代码/旧产物”,还是“新代码读取了旧业务数据”。
按照你描述的“IDE 构建已经修复,Git 统一打包又复现”来看,我会优先查 CI 的增量构建缓存和 HAR/HSP 等依赖产物。
蓝瘦的蜕变
清理下编译缓存跟构建包缓存试试看


星桥似海问题本质:很多人把"缓存"和"持久化"混为一谈。鸿蒙里:
@StorageLink/Preferences是同步落盘的小 KV,适合配置项,不适合大对象;- 大文件/图片缓存应放
cacheDir,且系统低内存时会被清; - 网络层缓存要自己控制有效期。
常见"缓存逻辑不生效"根因:
1. Preferences 写完必须 flush() 才真正写盘,否则只在内存在。
const pref = dataPreferences.getPreferences(this.context, 'app');
pref.put('token', value);
await pref.flush(); // 关键标记:PreferenceCacheV2 的落盘动作2. cacheDir 里的文件不保证长期存在,别用它当持久存储;要持久用 filesDir。
3. 想做"内存+磁盘"二级缓存,推荐 @StorageProp 配合手动写 filesDir,或在 API 12+ 用 cached 装饰的状态。
验证:改完杀进程再进,能读回说明落盘成功;读不回说明只写了内存(漏 flush 或写到了 cacheDir)。
佩臻这个有可能是构建的时候有缓存残留问题。
如果是通过 IDE 直接构建到真机时,DevEco Studio 通常会自动处理增量编译缓存,确保最新代码生效。
但通过 CI/CD 流水线或命令行统一打包时,如果构建环境中的缓存未被正确清理,hvigor 的增量编译机制可能会复用旧的编译产物,导致新代码没有被真正编译进最终包中。
推荐方案:在 CI/CD 流水线的打包步骤前,增加清理操作进行强制清理。

全栈若城本地 IDE → 真机时,DevEco 一般会检测代码和资源变化,只重编有改动的文件;但 CI 为了提速,可能缓存了 `.hvigor/`、`build/`、`oh_modules/`,甚至复用了旧的 HAR/HSP 产物,导致最终 HAP 中的 `.abc` 或资源文件没有更新。
建议按下面方式排查和处理:
rm -rf .hvigor/ build/ oh_modules/
hvigorw --no-daemon clean
hvigorw --no-daemon assembleHap --mode release如果项目包含多个本地模块,还要确认上游 HAR/HSP 已重新构建;发版构建建议固定使用 `clean + build`,不要直接依赖增量缓存。构建完成后,也可以解包 HAP,检查其中的 `.abc`、`resources.index` 等文件是否包含最新代码和资源。
如有帮助,欢迎给个采纳。
红薯味儿的栗子target/ 目录,并确保 CI 命令包含 clean 参数。这两项是导致“新包有旧代码”的最常见原因。
开开心心每一天【解决方案概述】
Hvigor增量构建机制在打包时复用了旧的编译产物,导致新包中包含旧缓存。IDE直接构建会触发完整构建流程或自动清理过期缓存,而通过git提交后统一打包(命令行hvigorw)时,增量构建缓存未清理,Hvigor对比上次构建的输入和输出后判定未变化则跳过任务执行,直接复用旧产物。根因是打包前未清理build目录和.hvigor缓存目录。
【实施步骤】
步骤1:在统一打包流程中,执行hvigorw assembleHap之前先执行hvigorw clean清理build目录
步骤2:确认hvigor-config.json5中execution.incremental配置项的状态,如需彻底避免可设为false
步骤3:检查.gitignore文件,确保build/和.hvigor/目录已被忽略,避免构建产物和缓存被提交到git仓库
步骤4:在CI/CD流水线中增加clean步骤,确保每次打包前工作空间被正确清理
【代码示例】
打包脚本示例:
hvigorw clean
hvigorw assembleHap
hvigor-config.json5配置(关闭增量构建):
{
"execution": {
"incremental": false
}
}
.gitignore配置:
build/
.hvigor/
【参考文档】
- 增量构建:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-incremental-build
- hvigor-config.json5配置:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-set-options
【验证方法】
1. 在统一打包前执行hvigorw clean,重新打包后安装到真机,检查fix的bug是否已修复
2. 检查hvigor-config.json5中execution.incremental的配置值,确认是否为true(默认开启)
3. 执行git ls-files build/确认build目录未被提交到仓库(应无输出)
4. 在CI/CD流水线中确认clean步骤存在且在打包步骤之前执行
【注意事项】
关闭增量构建(incremental: false)会导致每次全量构建,构建时间增加,仅在问题频发时建议使用
推荐方案是每次打包前执行hvigorw clean,既保留增量构建的效率优势,又确保产物最新
【备选方案】
方案A:打包前执行hvigorw clean清理build目录(优点:保留增量构建效率,清理彻底;缺点:需修改打包流程)
方案B:关闭增量构建incremental: false(优点:一劳永逸,无需修改流程;缺点:构建时间增加)
方案C:打包前同时删除.hvigor目录和执行hvigorw clean(优点:最彻底的清理;缺点:首次构建时间较长)
训犬者- 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
- 如您发布的内容为转载内容,请注明内容来源。
我要提问题
HarmonyOS webview如何清除当前缓存?(API12+)
HarmonyOS APP如何清除缓存 (API12+)
HarmonyOS 是否支持任务缓存?(API12+)
HarmonyOS Web组件如何设置浏览记录缓存?(API12+)
HarmonyOS 当前开发测试效率较低,寻求高效更新测试包方案 (API12+)
HarmonyOS 关于resfile文件更新问题 (API12+)
HarmonyOS 调试的时候需要重新运行打包,无法实时调整 (API12+)
HarmonyOS 打发布包始终提示存在debug信息,但是代码里没有debug字段 (API12+)




































苏公安网备 32011402010933号