评审用真实 UI 链路实测:600x960、800x1280(长宽比 1.6)在翻页拖动与条漫模式 都是 blit+0 / scaled+5;「先适高再切条漫」scaled+10。根因是解码几何来源与排版几何 不同源:decode_long_side() 把长边钳到屏长边 720(600x960 解成 450x720),而 strip_page_height() 按屏宽算出 480x768;mode_set() 又不动 g_fit,适高/原始进条漫 100% 重采样。 修复: - 解码目标 = 排版真正要的显示框:新增 page_geometry_at()(条漫=strip 高度、宽=视口宽; 翻页=fit/zoom),解码计划与绘页/就绪判据同源。 - plan_decode_long() 去掉屏长边钳制,只保留 MR_PAGE_BYTES_CAP(3MB) 硬上界, 超长条漫按比例收缩(不再因为「高度 > 屏长边」就永远对不上)。 - slot 记录本次解码的 want 几何;slot_ready() 改为几何比较: fit/缩放/模式变化 → 重解一次(放大再缩回、适高→条漫回到纯 blit); 被 3MB 钳住的解码 want 不变 → 不再反复重解(大屏活锁)。 - 解码几何随 page_req 下发、随 page_res 返回:worker 不再读 g_fit/g_zoom/g_vw/g_vh。 - 峰值估算把 downscale/缩解输出一并计入(P2-3)。 - 适宽长图(竖向单独溢出)不再算平移模式:1.6 比例页原先左右 tap/横拖会变成 「水平平移 0px」的空操作,页面根本翻不动;现在仍按翻页处理(原始档/横向溢出不变)。 - 窗口不再主动清窗口外的页图:0→1→0 来回翻不再反复重解同一页(140 页测试 decode 次数 21→14);容量仍由 MR_SLOTS + 字节淘汰兜底。 - state_reset 复位 g_meta/g_start_at(起始页在 on_enter 入口先取走),删重复注释。 测试:test_reader_perf 夹具改成 600x960(1.6)并补 800x1280、翻页拖动、条漫、 「适高→条漫」、双击放大缩回、静止无重解、大屏 1080x1920 无活锁;test_reader_many_pages 补 meow_ui_paint_full(绘制路径覆盖,P2-5)。
tuku(os.meow.picbrowser)打包与签名
图库 App(系统包名 os.meow.picbrowser)。构建与打包:
./build_tuku.sh # 交叉编译 picbrowser(MIPS32r2 静态)
./pack_tuku.sh # 打包 → os.meow.picbrowser.mpk(根布局;未签名)
一键签名出包
MEOW_SIGN_KEY=/path/to/signing.key ./pack_tuku.sh
- 工具查找顺序:
$MEOW_SIGN→PATH里的meow_sign→$HOME/Proj/MeowOS-For-R3P2/patch_v2/meow_sign/meow_sign。 - 私钥:
$MEOW_SIGN_KEY。未设置时脚本警告并仍产出未签名包(退出码 0);但os.meow.*系统包无签名会被设备拒装。 - 有工具 + 密钥时执行
meow_sign sign <mpk> <key>;若存在<key>.pub再执行meow_sign verify <mpk> <key>.pub。 - 私钥不入库、不随包分发;本仓不包含任何密钥材料。
mpk 布局
.mpk = tar.gz,条目直接在根层:
os.meow.picbrowser.mpk
├── app.json
├── picbrowser
└── <signature footer> # 仅签名包有(Ed25519,尾部追加)
即 tar -C build/os.meow.picbrowser -czf os.meow.picbrowser.mpk app.json picbrowser——
不带 os.meow.picbrowser/ 目录前缀,也不带 ./ 前缀。脚本在签名前用 tar -tzf 断言这一点。
签名是往 tar.gz 尾部追加 footer,签名后的 mpk 不要再跑 tar -t / gzip 之类的命令:
gzip 会报 trailing garbage ignored,属预期现象,不是包损坏。要检查布局请在签名前做。
安装
把 .mpk 放到设备 TF 卡,执行 nyai install os.meow.picbrowser.mpk;
os.meow.* 包必须验签通过(footer.package == 文件名茎 == app.json.package)。