# Runtime8 Android 开发与安装验证

2026-10-04。当前源代码已进入完整Android测试安装包，并在独立Android36模拟器运行。网站/API/App/OTA未正式发布，CF仍是设计文档站。

## 本轮修复

| 实际安装发现的问题 | 已修改 |
| --- | --- |
| 邮箱验证成功，但本站API仍识别为游客 | 带官方会话的API请求使用credentials omit，避免Android环境CookieJar覆盖手动合并的Cookie；认证仍由Better Auth/Expo/SecureStore管理 |
| 注册未记录当前安装设备 | 通过官方SDK的onRequest合并现有签名viewer Cookie，保留官方会话；设备记录不等于App资格审批 |
| API可以访问，但系统公共互联网检测未通过，进度不上传、缓存不启动 | JS仅在物理连接断开时停止联网任务；原生下载由实际传输判断连通性，逐任务保留Wi-Fi、账号、到期与容量检查 |
| 缓存已完成，断网播放器黑屏 | react-native-video原生Source解析器接受专用dramivio-offline地址，由原生缓存库复核账号、完成状态与有效期 |

名称、启动画面和图标已使用Dramivio现有确认资产。Android播放器仍复用Media3，iOS仍复用AVPlayer。

## 实际安装结果

使用真实Go、Better Auth与隔离RAM PostgreSQL；邮箱验证码本机捕获，App安装资格仅为测试审批。媒体为6秒MP4，供应商测试域名在客户端无法解析。

1. 邮箱首次验证生成账号；注册设备记录和登录前的爱心追剧操作均恢复。
2. 在线播放3集，实际直连失败后转发；数据库记录每集位置与时长，累计扣3次。
3. 缓存已观看的第1集：下载器先直连，失败后沿原许可转发，原生缓存完成280496字节。扣次仍为3，许可到期时间不变。
4. 移除测试网络映射，关闭Wi-Fi/移动网络，飞行模式冷启动App。缓存播放至6秒；服务器API与视频请求均未增加。
5. 离线拖到约2秒，结束进程后恢复该位置。联网后实际数据库收到2.005秒位置；仍为3次，无邀请奖励或已看证明。
6. 测试结束后关闭专用模拟器、Go、认证服务和临时数据库；Go测试退出码0。

冷启动恢复账号不会自动启动旧下载，用户点击“继续下载”恢复已排队任务。这项规则保留。

## 验证与产物

| 检查 | 结果 |
| --- | --- |
| App行为 | 342/342，类型检查通过 |
| Android实际Media3/SQLite/Cache | 34/34，无失败或跳过；新用例在修复前复现失败 |
| 原生接入JS回归 | 14/14，包含在App检查范围 |
| 当前完整Android APK | 构建、DEX/清单/Hermes/签名/运行版本检查通过，安装与实际播放通过 |
| ZIP 16KiB对齐 | 通过；此检查不代表所有设备/native库兼容已验收 |
| 持久补丁 | 官方6.19.2原包干净重放22个源码文件，与安装依赖一致 |
| iOS JavaScript | 当前Hermes导出通过；没有完整Xcode/Pods或iOS设备结果 |

本地测试APK（仅本机测试包，未公开提供下载） · [自包含验证记录](dramivio-runtime8-validation.json) · [缓存截图](runtime8-android-preview/cache-after-resume.png) · [断网播放截图](runtime8-android-preview/cold-offline-fixed-played.png) · [位置恢复截图](runtime8-android-preview/offline-position-restored.png)

APK仅用于本机联调：API为http://127.0.0.1:18091，OTA为同地址/api/updates，沿用现有debug签名。真实手机不能直接访问电脑的127.0.0.1；正式API、签名和OTA环境需在发布阶段配置。本包不是生产下载入口。

## 剩余范围

真实渠道、SMTP、App安装资格、邀请观看证明、真机和完整iOS构建仍未验收。后台剩余选集调度、服务端解码缓存、Redis适配、真实语义模型、完整设计状态和正式部署仍待完成。本轮为主Agent本地复核，没有新增独立子Agent复审。
