项目进展2026-09-24

MD 阅读 鸿蒙版 · graph.html 同步后真机回归

把 Android 版的确定性高度算法与全屏方案同步回鸿蒙后,用真机补做回归:9 类图形内联高度全部贴合(7.5 状态图完整、7.8 时间线无留白),全屏居中、双击缩放、拖动平移、返回键均正常,无崩溃。

  • 日期:2026-09-24
  • 设备:HUAWEI Mate 70 Pro 优享版 PLR-AL50(UDID 5BH0225B04002176)
  • 环境:HarmonyOS *****(SP10C00E105R16P3) / 屏 1316×2832
  • 包:product=device + buildMode=debug,versionCode 1001004 / versionName 1.1.4
  • 范围:图形内联高度、全屏查看(居中 / 关闭 / 返回键 / 双击缩放 / 拖动平移)

一、背景:为什么这一轮必须真机验

上一轮把 Android 版 graph.html 的通用改进同步回鸿蒙版,并放宽了内联高度接纳下限:

改动内容
高度算法改为确定性计算 h = min(自然宽, 可用宽) × vbH/vbW + padding(与时机无关,等价浏览器 max-width:100% + height:auto)
新增fitViewBoxToContent() / contentBox(viewBox 归一)
CSShtml,body{height:100%;overflow:hidden} 限定到 body.fullscreen(该规则曾导致普通流内容整块不绘制 → 图形白屏)
全屏全屏容器改用 position:fixed + 四边归零
接纳下限MermaidView 80 → 24、SvgView 60 → 24(原下限会把手测算的"真实高度 79"拒掉 → 保持初始 260 → 底部大块留白)

同步当时鸿蒙机未接入,只做了三层静态验证:编译通过、HAP 解包核对资源、本地无头浏览器验证算法自洽(9/9 贴合)。静态验证证明不了真机观感与手势,故本轮补做。


二、装机确认

检查项:hdc install -r entry-default-signed.hap 报 install bundle successfully。

🔴 按铁律,install successfully 不等于设备上的包被替换,必须另找判据:

字段值判定
installTime*****74(未变)⚠️ 覆盖安装时不刷新,不可作判据
updateTime*******84**✅ 与装机时刻仅差 8 秒 → 确认包已替换
versionName1.1.4 / versionCode 1001004✅ 与源码一致

经验:installTime 在覆盖安装场景下可能停在旧值,只看它会误判成"没换包"。本机可用 updateTime 作为可靠判据。


三、图形内联高度:9 类图形逐一覆盖

沿示例文档从上到下滚动,逐个图形核对「容器高度是否容纳全部内容」与「底部是否留白」。

#图形类型结果
7.1流程图(纵向)Mermaid✅ 贴合
7.2流程图(横向)Mermaid✅ 贴合,无多余留白
7.3时序图Mermaid✅ 贴合(长图完整)
7.4类图Mermaid✅ 贴合
7.5状态图Mermaid✅ 完整显示(见下)
7.6甘特图Mermaid✅ 贴合
7.7饼图Mermaid✅ 贴合
7.8时间线Mermaid✅ 无大块留白(见下)
8.2环形进度SVG✅ 贴合

7.5 状态图 —— 原先"高度过低、显示不完整"

起始黑点 → 未打开 → 打开文档 → 预览 → 三个分支(源码 / 图形全屏 / 关闭 ⊙)全部在容器内可见,无裁切;图形内容底边到「7.6 甘特图」标题的间距,与其余章节间距同量级。

7.8 时间线 —— 原先"高度过高、底部大块留白"

4 个里程碑两排标签 + 底部下拉箭头全部可见;内容底边到「八、SVG 图形」标题的间距正常(此前表现为容器内多出约 181px 空白)。

两处修复的机理相同:旧版下限(80)恰好把真实高度 79 拒掉,导致容器退回初始值 260。下限放宽到 24 后,真实高度被接纳,"过低"与"过高"是同一个根因的两个表现。


四、全屏查看

检查项结果证据
进入全屏✅蓝栏「渲染图」+「关闭」+ 底部提示「双指缩放 · 双击放大到细节清晰 · 拖动平移」
图形居中✅上下留白对称(7.5 与 7.8 两张均如此)
关闭按钮✅回到阅读页,滚动位置保持
返回键✅被全屏层接住,未穿透退出应用
双击放大✅图形包围盒 1196×1116 → 1314×1899(放大到可读,文字清晰)
拖动平移✅内容跟手移动
双击复位✅包围盒精确回到 1196×1116,与进入全屏时完全一致
崩溃✅ 无hilog 无 FaultLogger / CRASH;主进程 + render 进程均存活

五、结论

鸿蒙侧 graph.html 同步 + 下限放宽,真机回归全部通过,可以保留。

上一轮 Android 侧报告的两个症状(7.5 显示不全、7.8 底部留白)在鸿蒙真机上均已消除;全屏层的居中与手势链路(放大 / 平移 / 复位 / 关闭 / 返回键)完好。

真机日志中仅见系统级无害警告(AI_INNER_SERVICE 连接回调、chromium 渲染进程回收提示、AVSession StopCasting ret:401),均与本应用逻辑无关,不影响功能。


六、本轮沉淀的可复用技巧

1. uitest uiInput 完整手势集(本机实测)

click / doubleClick / longClick <x> <y>
swipe / drag <x1> <y1> <x2> <y2> [velocity]
fling / dircFling <direction> [velocity] [stepLength]
keyEvent <Back|Home|Power|keyID>
inputText <x> <y> <text>  /  text <text>

注意:dblclick(无驼峰)报 Invalid parameters,正确写法是 doubleClick。

2. 🔴 页面内"双击"手势无法用 doubleClick 注入

graph.html 的双击判定写在 touchend 里,要求两次 tap 间隔 < 300ms;uitest uiInput doubleClick 的注入间隔超出该阈值,不触发。 ✅ 解法:在一条 hdc shell 内连发两次 click —— 设备侧执行、间隔远小于 300ms:

hdc shell "uitest uiInput click 658 1550; uitest uiInput click 658 1550"

实测一次即触发 zoomToReadable(放大),再次即触发 fitToScreen(复位)。

3. ⚠️ 每次 hdc shell 往返约 8~12 秒 → 必须合并

12 次独立滑动调用耗时 2 分 10 秒;合并成 uitest …; sleep 1; uitest … 一条命令后,3 次滑动 + 截图 约 20 秒。真机批量操作务必合并。

4. 高度类判断用像素包围盒,不靠肉眼

对两张截图统计深色像素包围盒(PIL,px[x,y] < 120),可直接给出 w×h。本研究用它把"双击后好像变大了一点"从猜测变成结论(1196×1116 → 1314×1899),并证明复位是精确回到原值。


附:关键截图

文件内容
hm-graph-regress/g8.jpeg7.5 状态图完整 + 7.6 甘特图(无裁切、无留白)
hm-graph-regress/g4.jpeg7.8 时间线(无底部留白)
hm-graph-regress/gfs1.jpeg时间线全屏,图形居中
hm-graph-regress/fs_d3.jpeg双击放大到可读
hm-graph-regress/fs_p1.jpeg拖动平移后
← 返回文章列表