# JM Wear 1.1.0 交付验证

验证日期：2026-10-08。所有截图使用原创《星间漫游》和同一作品的 CBZ 导入，未展示远程漫画内容。

## 安装包

- 文件：`JMWear-1.1.0-release.apk`
- 大小：3,964,504 字节（3.78 MiB）
- SHA-256：`a8add1095ae9d8842f57dcd25c1d8b89c9a1757507ed0c9e809879b5c37d2fa9`
- 最低 API 30 / Wear OS 3；目标 API 36；编译 API 37。
- R8 混淆和资源压缩已启用；使用独立 RSA 3072 位 release 密钥，非 debug 签名。
- `apksigner verify` 成功；证书 SHA-256：`f916a0d2cebb285fcd3ef9d9c1109b5b252e51b4e46a14cc6f48922c37a1d17d`。
- 同一签名的 Release 更新安装成功，原书架、书签与阅读进度保留。

## 自动验证

| 验证 | 结果 | 内容 |
|---|---|---|
| 单元测试 | 20 通过，0 失败 | 请求签名、AES 解密、图片切条与余数、番号与链接、自然排序、镜像校验、JSON 持久化、上传与备份、进度合并、动态镜像解密、线路记忆、配置迁移与图片响应检查 |
| Wear OS 设备集成测试 | 6 通过，0 失败 | 离线入库与重启、位图重排、CBZ 导入、路径穿越拒绝、备份幂等恢复、真实镜像协议 |
| Android Lint Release | 0 错误 | 详细建议记录于 `test-results/lint-release.txt` |
| Release 构建 | 通过 | `test-results/release-build.txt` |

真实镜像集成测试使用真实 API 获取有效目录，先尝试不可达地址再自动切换到可用镜像，下载一页并完成原生图像还原，再验证缓存文件复用。新增测试获取并持久化最新域名列表，分别验证 API 解密和 CDN 实际图片响应，并识别不可达 CDN。临时测试书籍随后清除；未替换为示例返回。

## 最终 Release 的系统 UI 验证

环境：Wear OS 6 / Android API 36，圆形 384 × 384 屏幕，Asia/Shanghai 时区。

- 首页、番号键盘、书架分类与详情、阅读、设置及统计可正常进入；键盘实输 `123`。
- 离线示例实际导入 5 页；边缘翻页与长页滚动正常。
- 强制结束并重启后续读到第 2 页，书签仍在；开启仅离线模式后可继续阅读。
- 系统添加「继续阅读」Tile，封面与页码实际显示；点按「一键续读」回到原页。
- 系统添加「阅读统计」Tile，显示真实时长、去重页数、连续天数；点按打开应用统计。
- 品牌配色与系统动态配色切换正常，应用及 Tiles 同步更新。
- 浏览器接收页面及 CBZ 上传 HTTP 200，文件自然排序后自动进入本地书籍详情；退出传书页后接收端关闭。
- 无文件选择器时，备份入口可转到无线传书；浏览器下载 JSON 并上传同一备份恢复，统计不重复累计。

## 截图

`preview.png` 是原始模拟器截图的排版，未合成应用内容。单张截图保留原始 384 × 384 分辨率。

| 界面 | 文件 |
|---|---|
| 首页 | [01-home.png](/screens/01-home.png) |
| 书架 | [09-shelf.png](/screens/09-shelf.png) |
| 离线阅读 | [07-offline-resumed-reader.png](/screens/07-offline-resumed-reader.png) |
| 长页滚动 | [05-page-scroll.png](/screens/05-page-scroll.png) |
| 阅读 Tile | [06-reading-tile.png](/screens/06-reading-tile.png) |
| 统计 Tile | [13-stats-tile.png](/screens/13-stats-tile.png) |
| 番号键盘 | [16-number.png](/screens/16-number.png) |
| 统计 | [14-stats.png](/screens/14-stats.png) |
| 偏好设置 | [12-settings.png](/screens/12-settings.png) |
| 镜像设置 | [17-mirrors.png](/screens/17-mirrors.png) |
| 系统动态主题 Tile | [18-dynamic-tile.png](/screens/18-dynamic-tile.png) |

## 验证范围

实体手表上的续航、表冠输入和单手硬件手势尚未实测；系统手势支持使用 Wear Compose 官方 API，实际可用性取决于设备。Wear OS 3–5 的最低兼容性由 API 级别与 Lint 检查覆盖，运行测试使用 Wear OS 6。

默认镜像在本次真实网络测试中可用。v1.1.0 默认使用直接连接，不使用 HTTP 代理；默认 API 失败后会从服务方的三个 HTTPS 地址获取新域名，保存后可离线保留配置。自定义 API 不被自动覆盖，关闭自动镜像即可停止域名发现。图片列表从 3 条补全至 6 条，旧默认配置自动迁移。API 使用错峰并发尝试，成功线路优先复用，失败线路暂时后移；CDN 保留逐条尝试，避免在小内存手表上同时下载多张大图。

**大陆直连验收未完成。** 禁用 HTTP 代理的测试请求全部成功，但 Cloudflare trace 报告当前网络出口为日本（JP / NRT）；系统网络本身也可能有隧道路由。此结果不能代表中国大陆电信、联通、移动的实际可达性。完整状态见 `direct-network.json`。Pages 下载页和漫画镜像的可达性属于不同链路。

后续升级需保留 `signing/jmwear-release.jks` 与 `keystore.properties`；备份 JSON 不包含漫画图片。
