Files
MeowOS-SDK/tuku/README.md
T
AskaEth 4befbfe14c 图库: 书库点图改按文件名定位(修 P1 截断错位)+ 册间衔接根锁定(M18 评审 r1)
P1-1(会静默开错图):取消「书库从列表推导图片下标」。
- 新增 mr_reader_open_dir_at_name(dir, name):阅读器打开目录册后,在**自己刚枚举出的
  全量目录册**(mr_dir_book,与翻页同一份枚举)里按 basename 定位起始页(先精确,
  再大小写不敏感兜底;找不到退回续读/首页)。书库点击只传文件名。
- 删除 mr_library_image_index(不再有跨枚举的隐式契约)。
- 截断提示文案改为「仅显示前 2000 项(图片可在阅读器中翻到)」。
- 修复前(cb02722 探针,2100 张 4 位名夹具):rows=2000/truncated=1/
  library_images=2000/reader_pages=2100/**mismatched=590**(首行 p1412 → 打开 p1411);
  评审夹具为 1995/2000。修复后:2000 个可见图片行按名定位 **0 mismatch**,
  2100 页全量可翻;26 次真实 UI 点开(首尾各 3 + 20 个确定性伪随机)逐张命中。

连带处理(评审 r1):
1. 删掉 reader_page_enter 的 c->view 死写(reopen 判定用 activity active/depth);
   顺手删掉 library_page_create 里同款死写。
2. 阅读器册间衔接根锁定:新增 mr_path_within_root + mr_book_adjacent_rooted,
   book_switch 用浏览根(默认 MR_ROOT_DIR,测试可注入)钳制相邻册;
   根外的兄弟册按「没有相邻册」处理。test_cont_adjacent A7 验证「明文 _ex 会越根、
   rooted 拒绝、根内翻册不受影响」;test_mode_switch_host H6 验证条漫末页不越根。
3. test_reader_perf 不再依赖顶栏 tap 命中时序:模式切换改走测试钩子
   mr_reader_test_toggle_mode()(与顶栏动作同一个 mode_set),负载下稳定。
4. page_cache 注释去掉「缩略图缓存/缩略图线程」过时描述(只改文字)。

回归:run_tests.sh(library 81 / nav 74 / lazy 57 / perf 25 / … / open_book 含 2100 用例)
与 run_webtoon_tests.sh(含 A7/H6)全 PASS;交叉构建零警告。
2026-11-05 20:26:40 +08:00

57 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# tuku(os.meow.picbrowser)打包与签名
图库 App(系统包名 `os.meow.picbrowser`)。构建与打包:
```sh
./build_tuku.sh # 交叉编译 picbrowser(MIPS32r2 静态)
./pack_tuku.sh # 打包 → os.meow.picbrowser.mpk(根布局;未签名)
```
## 浏览交互(文件管理器模型,M18)
- 列表 = 当前目录一层的**子目录 + 受支持图片(png/jpg/jpeg/bmp)+ 档案册(.cbz/.zip)**;
目录优先,组内自然序(大小写不敏感,同键按原始字节兜底,`A.jpg`/`a.jpg` 不抖动)。
- 点目录 = 进入(空目录也进);点图片 = 从该图开始读(按**文件名**交给阅读器,
由阅读器的全量目录册定位起始页——列表被 `MR_LIB_SCAN_MAX` 截断时也不会点错图);
点档案册 = 打开档案册(第 1 页/续读)。
- 单目录超过 2000 项时列表只显示前 2000 项并给出「已截断」提示行;图片仍可进入阅读器翻到。
- 缩略图功能已关闭:行内只有类型图标 + 文件名 + 类型·大小;首帧只做单层
`opendir/readdir + lstat`,滚动/点击路径不解码、不访问文件、不重排字符串。
- 浏览根锁定 TF 卡根(`/usr/data/mnt/sd_0`):根目录不显示返回箭头,左缘返回 = 退出 App;
**不允许上溯到 SD 卡的上级目录**。
- 根目录不可访问(未插卡/挂载失败)→ 友好空态「未检测到 SD 卡」;点顶栏刷新或重进页面即重扫,
不弹错、不崩溃。
## 一键签名出包
```sh
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`)。