Repository navigation
dsh-android 1.2.1
这一版是应用版本升级,主题是恢复模式 —— harness 起不来的时候,应用不再只能给你一个空白页。
1.2.0 的设备需要安装新的 APK。 恢复模式有一半在应用侧(面板、桥接口、自动进入),
热更新包送不过去;热包也不跨应用版本线,所以这一版的内容只随 APK 下发。
Added
- 恢复模式:harness 起不来时也能进沙箱。连续几次启动失败后应用会自己切换过去 ——
不加载 harness,直接起来一个 SSH 服务和一个 shell。同一 Wi-Fi 用ssh -p 8022 root@<手机 IP>,
插着数据线用adb forward tcp:8022 tcp:8022,只有手机时就点面板里的「手机内控制台」
(一个不依赖 harness 的行模式终端)。密码是每次进入时新生成、退出即失效的令牌 - 恢复模式支持端口转发:在沙箱里把 harness 重新拉起来之后,
用ssh -p 8022 -L 3080:127.0.0.1:3080就能从电脑的浏览器打开它 —— 手机自己渲染不出来时这条最省事 - 面板里可以直接复制连接命令、换一个新令牌、退出恢复模式;SSH 主机密钥由每台设备自己生成
(存在/root/.dsh-recovery/),不再用载荷里那份所有安装都一样的
Changed
- 沙箱终端服务的会话现在会回收:关掉的标签页、重载的页面以前会在沙箱里各留一个 shell,
攒够 8 个之后新终端就再也开不出来 - 桥接口新增
/recovery/*,/snapshot带上恢复模式状态(给以后在设置页里做一张卡片留的)
Fixed
- 退出恢复模式后 root 密码一定回到锁定:原来只靠脚本的信号处理和「进程退出后补一次」,
而应用停沙箱是直接杀进程、紧接着 800 毫秒就启动下一个 guest,两处都可能被跳过;
现在正常启动时也会锁一次,不依赖信号也不依赖时序 - 一行畸形请求不再能让终端服务整个退出(恢复模式下它是唯一的入口)
- 更新不会因为版本号倒退而卡住:
versionCode以前只靠公式(1.2.1→ 10201)或环境变量,
而这条线已经原地重发到 10212 —— 现在它记在仓库的VERSION_CODE里,重建也还是 10213
运行时(t3)
- 载荷里的 harness 升到
0.2.0-rc.2(npm 上的latest;上游没有不带后缀的0.2.0)。
这是t的变化,所以必须装新 APK,热包送不过去。1.2.1 的 APK 同时是"恢复模式"和"t3 运行时"。 - 升之前在这台设备上逐项验证过:硬链接补丁的四个发布点(三处 import 行、四个调用点、注入锚点)
在0.2.0-rc.2里原样还在,所以补丁不会触发"上游改了"的拒绝;装完在 Node 22.23.2 上跑
市场冒烟,对照组(不加载市场)与实验组(加载市场)各一次真实调用都正常;
用真实 profile 分别起 0.1.7-rc.2 与 0.2.0-rc.2,两边页面都是 200 且 35334 字节逐字节相同 - 补上了
prepare_rootfs.sh缺的一步:guest 工具(git/curl/python3/tmux/openssh-server 等)
以前是手工装进 rootfs 的,仓库脚本里没有 —— 也就是说照仓库脚本从头构建出来的载荷没有 sshd,
而恢复模式正需要它。现在这一步在脚本里,并且装完硬校验(缺任何一个就构建失败,
不会让一个"起不来恢复模式"的载荷发出去)
注意
- 恢复模式期间 harness 不在运行:手机上看不到会话列表、也不能对话,它是在「修」而不是「用」
- 修好之后记得点「退出恢复模式」,否则下次启动还是恢复模式
- 不想装 APK 的话,已装的设备也可以在恢复模式里用
scripts/upgrade-dsh.sh把 harness 单独升到
0.2.0-rc.2(见docs/UPGRADE-DSH.md);但换t之后载荷与设备不再一致,
下次装全量包会把它覆盖回去
安装:下载本页的 dsh-android.apk,覆盖安装即可;会话、API Key、挂载与设置都会保留。
首次启动需要解包内置运行时(约 2 分钟),之后冷启动约 5 秒。完整说明见 README。