
第4篇构建日志已经BUILD SUCCESSFUL终端却不返回hvigorw --no-daemon更适合排障摘要很多鸿蒙构建问题不难难的是“你以为它成功了脚本却说超时你以为它失败了日志里又已经成功”。这类问题我后来几乎都统一收敛到一个做法排障和自动化验证时优先使用hvigorw assembleHap --no-daemon。如果你做鸿蒙项目做得稍微久一点大概率都会碰到过类似场景日志里已经出现BUILD SUCCESSFUL可终端就是迟迟不退出或者脚本层面判定它超时了搞得你分不清到底是构建本身失败还是 daemon 没把控制权还回来。这类问题最恶心的地方在于它会把“真正的构建失败”和“工具行为不稳定”混在一起。最后你不是在修业务问题而是在和执行环境扯皮。问题现象构建日志里已经出现BUILD SUCCESSFUL但终端不返回。自动化脚本偶发超时导致结果难以复现。同一条命令有时成功退出有时卡住不动。根因分析我后来发现这类问题很多时候不是业务代码出了多大错而是 daemon 机制让“成功”“失败”“未退出”这三种状态混在了一起。对于日常本地开发来说daemon 确实有提速价值但对于排障、自动化验证、交付前复查来说你更需要的是结果稳定、错误直接而不是“偶尔更快”。华为官方文档里也明确提供了--no-daemon和--stop-daemon-all这类参数本质上就是给这类场景准备的。我是怎么修的1. 先停掉已有 daemon避免旧状态干扰如果我已经怀疑 daemon 行为不稳定第一步不会立刻盲重试而是先把环境清干净hvigorw --stop-daemon-all这个动作的意义不是碰运气而是避免旧进程继续污染当前判断。2. 用--no-daemon重新跑完整构建hvigorw assembleHap --no-daemon如果是在 Windows 环境下.\hvigorw.bat assembleHap--no-daemon我现在基本把这条命令当成鸿蒙项目排障的标准入口因为它更容易稳定暴露第一条真实错误。3. 看第一条关键错误不要被后置噪音带偏构建日志越往后通常越嘈杂尤其脚本包装层多了以后最后那行提示未必是根因。真正有价值的往往是第一条编译错误第一条依赖错误第一条任务执行异常4. 把--no-daemon固化到自动化验证里我后来把这个习惯写死在自己的流程里尤其是下面这些场景修完 bug 后的回归构建交付前最后一轮检查Agent 或脚本自动化执行远程环境和 CI 环境构建这样做的好处是构建成功就是成功失败就是失败至少结果边界清楚。修完以后怎么验证验证很简单但必须做先执行hvigorw --stop-daemon-all再执行hvigorw assembleHap --no-daemon观察终端是否稳定返回且错误或成功信息是否清晰如果这一步都不稳定后面再谈业务修复意义不大。这次踩坑我得出的结论daemon 适合提速不适合当排障真相来源。自动化环境里终端能否稳定返回本身就是质量要求。构建成功和脚本成功不是一回事不能混着看。真正要定位问题时优先追第一条有效错误而不是最后一行噪音提示。可以直接带走的排查顺序如果你也遇到“日志像成功但结果像失败”的构建问题我建议按这个顺序查先执行hvigorw --stop-daemon-all再执行hvigorw assembleHap --no-daemon先看第一条关键错误而不是最后一行自动化和交付验证统一到--no-daemon很多构建排障之所以越查越乱不是因为问题有多深而是命令入口一开始就没选对。