# 旧手机改造交接说明:人工清单 + 架构 + AI 提示词 > 这套方案的核心思路:**人只做"只有人能做的事",其余全部交给 AI 助手(DSH)**。 > 于是文档也分成三份:① 整体架构(看懂在搭什么)② 人工操作清单(你亲手做的部分)③ 一段提示词(丢给 AI 的部分)。 > > 注:下文出现的设备参数(系统版本、内核、内存、存储等)都是**本机实测值,仅作示例**。 > 这套方案的适用边界不由具体配置决定——提示词里也**不写死硬件**,AI 会自己探测环境; > 如果设备条件更好(有 root、内核支持 Landlock、存在可写且可执行的非 FUSE 分区),它能做的事只会更多。 --- ## 一、整体架构 ``` ┌───────────────────────────────────────────────────────────────────────┐ │ Android 12(内核 4.19.157,EMUI) │ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ Termux(bionic 用户态 · app uid 10191 · 由人安装并授权) │ │ │ │ │ │ │ │ 原生层(无翻译开销,适合长跑服务) │ │ │ │ sshd :8022 OpenList :5244 aria2 :6800 │ │ │ │ python3 · git · pkg · android-tools(adb) │ │ │ │ │ │ │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ │ │ proot-distro Ubuntu 26.04(glibc 用户态 · 假 root) │ │ │ │ │ │ │ │ │ │ │ │ node → DSH Web :3080 ← AI 操作台(浏览器打开) │ │ │ │ │ │ │ │ │ │ │ │ AI 的三条手臂: │ │ │ │ │ │ ① 容器内 bash → glibc 程序 / Ubuntu 工具链 │ │ │ │ │ │ ② ssh -p 8022 → 原生 Termux(真内核 / 真实负载) │ │ │ │ │ │ ③ adb shell → 整机(uid 2000,系统设置/别的应用) │ │ │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ 人负责的只有三件事:装应用 / 点授权弹窗 / 改厂商设置(+ 重启) │ └───────────────────────────────────────────────────────────────────────┘ ``` ### 三层各自的职责与代价 | 层 | 提供什么 | 代价(实测) | |---|---|---| | **Termux**(bionic) | 原生速度、`pkg`、真实内核与负载、adb 客户端 | 跑不了 glibc 程序(AList/OpenList 官方二进制、DSH 的原生模块 `flock`/`node-pty`) | | **proot Ubuntu**(glibc) | 兼容 glibc 生态、Ubuntu 工具链 | 假 root(`id`=0 但内核里 uid 仍是 10191)、无 capability(不能绑 <1024)、无 namespace(Docker 免谈)、无 Landlock(内核 4.19)、`/proc/loadavg` 是静态快照、`/sdcard` noexec、ptrace 性能税(实测小目录 0.42s vs 原生 0.33s) | | **adb**(uid 2000 shell) | 越过应用沙箱:改全局设置、读 logcat、读别的应用数据、注入输入 | 5555 端口暴露在局域网、私钥等于万能钥匙、重启后 TCP adb 未必自动恢复 | ### 为什么必须"三条手臂" | 通道 | 身份 | 独有能力 | |---|---|---| | 容器 bash | 假 root / 真 uid 10191 | 运行 glibc 程序、操作容器文件 | | `ssh -p 8022` | Termux app uid | 真实 `uptime`/内核、`pkg install`、原生速度、`/proc` 里大部分真实信息 | | `adb shell` | uid 2000 shell(含 `readproc`/`log`/`input`/`ext_data_rw`) | `settings`/`device_config` 改系统、`logcat`、`/sdcard/Android/data`、`pm` 装装卸卸、`input` 注入 | **只有一条腿会瞎**:只在容器里,你会以为内核是 6.17、负载永远是 0.12;只在 Termux 里,你跑不了需要 glibc 的服务;只有 adb,你碰不到 Termux 的私有目录。 --- ## 二、人工操作清单(AI 做不了 / 不该做的部分) ### 阶段 1:给 AI 一条能进来的通道(一次性,约 15 分钟) | # | 你要做的事 | 为什么必须人工 | 完成标志(怎么确认没漏) | |---|---|---|---| | 1 | **装 Termux**:用 GitHub 的 debug 构建(`termux-app_v0.118.3+github-debug_arm64-v8a.apk`),不要 Play 版 | 此时手机上一个自动化通道都还没有;而且插件必须与 Termux 同源同签名 | 能打开 Termux,跑 `pkg update` 有反应 | | 2 | **装 Termux:Boot**(同样用 GitHub debug 版),**并打开它一次** | 同签名要求;"打开一次"是它生效的前提 | 应用列表里能看到,且点开过 | | 3 | **开开发者选项**:设置→关于手机→连点版本号 7 次;打开 **USB 调试** | 纯 GUI 操作 | 设置里能看到"开发者选项" | | 4 | **开通 adb TCP 通道**(二选一) | 需要人在设置里点、或插一次 USB | `adb devices` 能看到设备 | | 4a | 路线 A(推荐,需一台电脑 + 数据线):插 USB → `adb tcpip 5555`,之后可拔线 | 首次必须 USB | `getprop service.adb.tcp.port` = `5555` | | 4b | 路线 B(无电脑):开发者选项→**无线调试**→打开 → 记下**配对端口+6 位配对码**;然后在 Termux 里 `pkg install android-tools` 后自己连自己:
`adb pair 127.0.0.1:<配对端口>` → 输入配对码
`adb connect 127.0.0.1:<调试端口>` | 配对码需要人看一眼并输入 | `adb devices` 显示 `device`(不是 `unauthorized`) | | 5 | **`adb connect` 时手机上弹出"允许 USB 调试吗" → 勾"一律允许" → 允许** | 这是系统安全弹窗,只能人点 | `adb shell id` 输出 `uid=2000(shell)` | | 6 | **在 Termux 里粘贴一次引导命令**(见下) | 需要人执行一次"把 AI 装上去"的动作 | 最后会打印一个 `http://127.0.0.1:3080/?token=...` | | 7 | **把打印出来的网址在手机浏览器打开** | AI 的界面 | 看到 DSH 的操作台 | #### 第 6 步的引导命令(整段粘贴,约 10–20 分钟,看网速) ```bash # ① Termux 侧基础件 pkg update -y && pkg install -y proot-distro openssh android-tools python3 curl git termux-setup-storage # ← 会弹系统对话框,点"允许" ssh-keygen -A && sshd # 生成 host key 并启动 SSH(8022) # ② 装 Ubuntu 并在里面装 Node + DSH proot-distro install ubuntu proot-distro login ubuntu -- bash -lc ' apt update && apt install -y curl ca-certificates && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && apt install -y nodejs && npm i -g @deepseek-ai/dsh && echo "DSH 安装完成"' # ③ 启动 DSH(前台运行,会打印带 token 的地址;这个窗口先别关) proot-distro login ubuntu -- /usr/bin/dsh web --no-open ``` > 提示:③ 的地址里那个 `token` **只能打开一次**(打开后会换成 30 天有效的 cookie),所以看到就先打开。 > 之后 AI 会自己把 DSH 改成开机自启、把地址留档、并提供 `dsh-url` / `dsh-open` 这类命令。 > > **关于 SSH(AI 的第一条手臂)**:引导命令里已经起了 `sshd`,这一步人只需要"把服务打开"。 > **公钥不用你复制** —— 因为容器能直接看到 Termux 的家目录,AI 会自己生成密钥、把公钥写进 `~/.ssh/authorized_keys`, > 然后 `ssh -p 8022` 自己连进来。这条通道是它后续所有原生操作(装包、起服务、写开机脚本)的前提; > 验证标志是它的汇报里出现 `TracerPid=0`、真实的内核版本与真实的 load average。 ### 阶段 2:让"开机自启"能生效(EMUI 专属,AI 改不了) | # | 你要做的事 | 为什么必须人工 | 完成标志 | |---|---|---|---| | 8 | 设置→应用和服务→**应用启动管理**:把 `Termux` 和 `Termux:Boot` 从"自动管理"改成**手动管理**,三个开关(自启动/关联启动/后台活动)全开 | 华为的启动管理是私有实现,`adb`/`appops` 都碰不到它的数据库 | 见阶段 3 的重启验证 | | 9 | 设置→电池→**应用耗电管理**:`Termux` 设为**不受限制** | 同上 | 同上 | > 这一步不做会怎样?实测过:重启后服务**一个都不会起**,而且脚本自己的日志 `~/boot.log` 里**连一条记录都没有** —— 不是脚本错,是开机广播压根没送到。 ### 阶段 3:需要"人"来做零散动作 | 场景 | 为什么 AI 不做 | |---|---| | **重启手机验证自启** | `adb reboot` 会连带杀掉 DSH 自己(宿主没了),所以必须由人重启;AI 应在重启前把状态写盘并告诉你重启后怎么核对 | | **任何系统弹窗**(存储权限、adb 授权、安装未知应用…) | 只能人点 | | **接 WiFi / 换网络 / 输入密码** | AI 无法代做(除非你明确让它用 adb 注入输入,且界面可靠) | | **厂商私有设置**(启动管理、省电策略、权限管理) | 非 AOSP 接口,adb 改不了 | | **卸载/停用系统应用** | 高风险写操作,应由人确认后再让 AI 执行 | | **常年插电的电池保护**(强烈建议) | 纯硬件风险,AI 无法代劳:锂电池长期满电 + 温热会鼓包。三选一——①系统里设**充电上限 80%**(电池健康/智能充电/电池保护);②用**定时插座**每天只充 1~2 小时;③买**直供电电池小板**替换电池(一劳永逸,但失去"自带 UPS",建议接个小 UPS/充电宝)。原电池尤其已鼓包的**不要继续充放**,交回收点 | ### 交接之后:AI 会自己完成的(不需要你参与) **建立原生 SSH 通道**(自己生成密钥 → 写进 `~/.ssh/authorized_keys` → 连上并自证是真原生)、 装原生服务(OpenList / aria2)、配 aria2 RPC 密钥与鉴权、把 OpenList 接上 aria2、配 OpenList 的存储挂载与临时目录、 写开机自启脚本(端口守卫 + 幂等 + `boot.log`)、配 `.bashrc` 兜底、配 MOTD 显示常用命令与本次 DSH 地址、 写 `dsh-url`/`svc-status`/`ol-temp` 之类小工具、用 adb 抓资源报告、排查问题。 **它每做一步都会自己验证,并给出证据**(进程、端口、日志、hash),而不是"应该可以了"。 --- ## 三、把下面这段丢给 AI > 完整可直接粘贴的提示词在 **`old-phone-prompt.txt`**(纯文本,无 markdown 包裹,方便整段复制)。 > 用法:在 DSH 的对话框里粘贴它,然后等它汇报第一轮取证结果。 提示词里包含五块内容: 1. **目标与环境事实**(设备、内核 4.19、假 root、无 Landlock、EMUI 拦截、`sh` 是 dash 等)—— 让它不用自己去踩已知的坑 2. **要它交付的东西**(native 服务 + 自启 + MOTD + 小工具 + 验证报告) 3. **工作方式约束**(先只读取证 → 假设 → 最小改动 → 验证;每步给证据;写操作先说明) 4. **安全红线**(不碰密码、不开 `allow-external-apps`、不动 `/sdcard` 上的可执行文件、不 `adb reboot`) 5. **什么情况下必须停下来找你**(需要重启 / 需要点弹窗 / 需要改厂商设置) ### 为什么要用"提示词"而不是"教程" - 教程是**给人读的**,读完还得人翻译成命令、再一条条执行、再自己判断对错 - 提示词是**给 AI 读的**:目标、约束、验收标准一次说清,它自己去取证、试错、验证、汇报 - 而且提示词可以**随环境变化重写**:换台手机只需改"环境事实"那一段,剩下原封不动 - 真正需要人守着看的,只有本文第二节那几行 —— 那部分写清楚就够了 --- ## 附:这套方案的能力边界(写提示词时也要告诉 AI) **能做**:单二进制服务、Web 面板、下载机、WebDAV、定时脚本、整机运维(改设置/看日志/抓报告/输入注入) **别指望**:Docker/任何容器(无 namespace)、FUSE 挂载类(`rclone mount`/`sshfs`/`s3fs`)、监听 80/443、真正的沙箱隔离、systemd **架构口诀**:**重 I/O 放原生,重依赖放容器,整机操作走 adb**。