THAMO产品与实施文档

THAMO 阶段2交付报告

日期:2026-11-02。范围:原生四入口、OTP账户、分范围云端选择、真实状态及浏览器移除。状态:本地 lab APK 已构建、安装并通过下述模拟器验收;阶段3–6及公网THAMO尚未交付。

可体验交付

• 模拟器:独立 thamo-stage2 / emulator-5582,Android15/API35;已保留合成已登录账户,首页10分。

• APK:.stage2/private/artifacts/THAMO-0.7.0-stage2-lab.apk(不进Git)。包名 com.thamo.protect.lab,版本0.7.0 / 7,min29 / target36,Android Debug签名。

• APK SHA-256:53b66a439515147c0544e3817ead624446ccc24306a8e2cb674bb590dddea655。从设备导出已安装base.apk与本地产物摘要一致。

• 真实后台:http://127.0.0.1:18874/admin;本机凭据仍在`.stage1/private/admin-access.json`,不在APK或Git。

• 这是明确的本地lab包,通过 adb -s emulator-5582 reverse tcp:18874 tcp:18874 使用开发服务。不是可脱离本机运行的HTTPS正式手机版本;原AGLO公网不变。

已实现

1. 移除浏览器源模块、Gradle依赖、浏览器组件与URL接管;旧源码可从Git历史回退,COPYING归档到docs/legal。短信里点HTTP/S链接仅把所点URL预填到检查页,确认打开时使用外部浏览器。

2. 原生THAMO橙红/墨蓝Logo与保护、短信、电话、我的四入口。保留Fossify短信功能。电话、应用扫描和新自动短信检测/同步明确待接入,不请求空壳角色、不伪造扫描。

3. 手机号校验、随机OTP、错误提示、重发倒计时、换号、登录、Keystore会话恢复、续期、退出与注销入口。注册不依赖短信角色。实验短信由本地服务生成随机码,经模拟器真实SMS接收再输入,未发商业短信。

4. 一次云端数据类别说明及SMS/AppList/通话三个独立选择;服务端保存同意版本。先读取服务器已有设置,未变更项目不重复写revision。系统角色与云端选择分开;当前页面只保存选择,不采集上传三类记录。

5. 所有取消项先本地停用并标待撤销,失败可重试;捕获会话及本地epoch,旧响应不能覆盖新账号或新的撤销。退出只有服务端成功才显示完成;Activity页面/生命周期隔离过时回调。

6. 首页上报实际短信角色/权限,其余未接入readiness为false。仅在线current显示确认分数;断网显示上次确认,退出0分。后台同一设备实际10分、0批次、三类0记录。

实际验收与证据

范围结果证据
完整APK构建成功;保留工具链警告,非零警告构建evidence/stage-2/android-build.log
APK身份/权限/签名无浏览组件、HTTP VIEW、QAP、通话记录权限/默认电话组件;lab仅loopback HTTPapk-identity.json、apk-manifest.xml及apk-*.txt
安装一致性设备导出APK摘要与候选一致installed-proof.json
手机主要旅程16项断言通过:四入口、两次拒绝/续接、手机号、错误随机码、正确码、真实云选择、重复保存、10分、冷启、续期、退出、再登录、单范围撤销emulator-uat.json / emulator-uat.log
补充模拟器断网/恢复、Bangla、1.5/2倍字体、实际SMS角色授予、原生收件箱、角色撤销引导通过extra-uat.json / extra-uat.log、相关截图
客户端隔离逻辑13项通过;真实Kotlin客户端配主机Context/Session/JSON/transport替身client-tests.log;tools/test_thamo_client.py
短信运输适配14项通过;默认旧品牌保持兼容,THAMO品牌显式配置provider-tests.log
独立后台只读核对同一合成账户/设备,短信关闭、AppList开启、通话未开启;无任何三类数据上传,确认10分backend-account-proof.json、stage2-admin-device.png

客户端主机测试不是Android Keystore或网络证明;冷启/实际网络由模拟器旅程另证。OTP过期、重发限流的服务端逻辑沿用阶段1测试;本轮UI验证错误码和实际两次短信登录,没有声称在手机上等待自然过期五分钟或测真实运营商送达。截图不留验证码明文,收件箱包含测试OTP,因此仅内存验收、不保存其截图。

UAT期间修正了测试脚本对adb排序参数与系统授权按钮大小写的处理;模拟器设为验收期间保持唤醒。首次构建离线缓存缺依赖,复用任务专用官方Maven缓存通道;Gradle文件监听出现源码改动后误判up-to-date,最终使用--no-watch-fs强制重读,重新编译后安装并校验摘要。没有修改全局Gradle/Codex配置或其他AVD数据。

构建与复验

先设置JDK21的JAVA_HOME和本机ANDROID_HOME,执行tools/build_thamo_lab.sh。已具备完整依赖缓存时可加--offline;本机专用依赖适配可通过GRADLE_INIT_SCRIPT显式传入,路径只存私有环境,不是正常构建必需的公网依赖服务。

模拟器启动命令和既有官方镜像摘要见emulator-environment.json。安装后执行adb reverse,再运行.venv/bin/python tools/thamo_stage2_uat.py及tools/thamo_stage2_extra_uat.py。首个脚本预期从未登录、未持有SMS角色开始;重跑前通过UI退出、撤销实验角色并核合成设置,不清业务库。手机号仅用本地允许的合成号,受正常重发/小时上限约束,不为了重跑放松限制。

未完成及下一阶段

未调用真实Gemini、未启用举报分析worker、未做新三类自动采集/同步、未接默认电话或App扫描;没有商业SMS、真实SIM/MMS/双卡/实体手机或Play结果。本APK约88MB,为未优化lab调试包,不作低存储正式包达标依据;正式签名、压缩优化和手机HTTPS分发在后续阶段。

阶段3将连接真实默认短信检测、Gemini、增量云同步、截图举报与自动分析worker,按同一条系统短信→App风险→后台记录闭环验证。当前阶段2的角色/收件箱检查不替代阶段3的完整短信收发/MMS回归。