1. 为什么要在安卓上折腾远程接管
先说清楚这套方案到底解决什么问题。Android 13/14 之后,Scoped Storage 把/sdcard/Android/data/这类目录锁得死死的,普通文件管理器点进去就是一片空白,自动化脚本想批量清理 App 缓存基本没戏。上 Root 呢?Magisk 刷完银行 App 直接闪退,KernelSU 也不是每台机器都能玩,风险收益比太低。
所以思路是绕开 Root,用 ADB 无线调试接口拿一个 UID 2000(shell)级别的身份。这个身份在安卓权限体系里比普通 App 高一大截,能读写/Android/data/,能调pm、am、dumpsys这些系统命令,但又不触发 SafetyNet 检测。Shizuku 就是干这个的——它把 ADB 的 shell 权限常驻在后台,再通过rish脚本把命令代理过去。
那 Termux 和 OpenClaw 各自扮演什么角色?Termux 是落地入口,提供完整的 Linux Shell 环境和 SSHD 服务,让外部能连进来。OpenClaw 是执行大脑,它跑在另一台设备或服务器上,通过 SSH 连到 Termux,把自然语言指令翻译成 shell 命令序列,再经由rish提权执行。三者串起来,就是一条「远程 AI Agent → SSH → Termux → rish → shell 权限」的完整链路。
这套东西适合谁?手里有闲置安卓机想当远程下载机/文件服务器的人;需要批量管理多台设备 App 数据但不想 Root 的运维;以及想拿安卓当 AI Agent 执行节点的玩家。不适合追求一键脚本的小白,因为中间每一步都有坑,下面逐个拆。
核心检索词先摆出来:OpenClaw 远程接管安卓、Termux Shizuku 提权、安卓免 Root 读写 Android/data、TaoToken endpoint 配置。你如果是搜这几个词进来的,下面的步骤能直接跟做。
我实测下来,整条链路最脆弱的环节不是 Shizuku 本身,而是国产 ROM 的杀后台策略和 Termux 的 wakelock 管理。这两点不处理好,SSH 连上三分钟就断,OpenClaw 的请求全部超时。所以第 4 节会重点讲保活配置。
另外提前说一句:模型 endpoint 这块,我统一改到了 TaoToken 的 API 通道,一个 Key 管所有模型调用,省得在 OpenClaw 里配一堆 provider。具体怎么改在第 3 节,有完整的 JSON 片段可以直接抄。
2. TaoToken 前置准备与 Key 获取
在动手配 OpenClaw 之前,先把模型通道的事情解决掉。OpenClaw 这类 Agent 框架本身不带模型,它需要你提供一个兼容 OpenAI 格式的 endpoint。你可以选择直连各家官方 API,但那样每换一个模型就要改一次配置、管一套 Key,设备多了很烦。
TaoToken 的做法是提供一个统一的 API 通道,Base URL 固定,Key 固定,模型 ID 按需切换。对 OpenClaw 这种需要频繁调用不同模型(比如规划用强模型、执行用快模型)的场景来说,配置成本低很多。
先注册账号。打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,用邮箱注册即可。注册完进控制台,找到 API Keys 页面,新建一个 Key。这个 Key 只显示一次,复制下来存好,后面 OpenClaw 配置和 Termux 里的环境变量都要用。
控制台地址是 https://taotoken.net/console ,API Keys 管理页在 https://taotoken.net/api-keys 。如果你只是想先验证模型通不通,可以用模型对话页面 https://taotoken.net/chat 直接发一条消息测试,不用写代码。
Key 拿到后,记下两个东西:
| 配置项 | 值 |
|---|---|
| Base URL | https://taotoken.net/api |
| API Key | 你刚创建的那串sk-开头的字符串 |
| Model ID | 按需选,比如claude-sonnet-4-20250514、gpt-4o等 |
注意 Base URL 不要加 UTM 参数,API 调用地址就是干净的https://taotoken.net/api。OpenClaw 内部走的是 OpenAI 兼容协议,所以完整请求路径是https://taotoken.net/api/v1/chat/completions,这个在配置里通常只需要填 Base URL,框架会自动补/v1/chat/completions。
如果你用的是 Claude Code 或者需要 Anthropic 原生协议的场景,TaoToken 也提供了对应的接入文档,地址是 https://taotoken.net/doc 。Coding Plan 适合长期跑 Agent 任务的用户,地址 https://taotoken.net/coding-plan ,比按量计费划算。
这里有个坑要提前说:OpenClaw 的配置文件里,base_url字段有的版本要求带/v1,有的要求不带。我实测下来,填https://taotoken.net/api然后让框架自己拼/v1/chat/completions是最稳的。如果你填了带/v1的,有些版本会拼成/v1/v1/chat/completions直接 404。第 5 节会专门讲这个报错怎么排查。
Key 存好后,下一步是把它写进 OpenClaw 的配置。但在此之前,得先把 Termux 和 Shizuku 的环境搭起来,因为 OpenClaw 最终是通过 SSH 连到 Termux 执行命令的,链路顺序不能乱。
3. 可复制配置:Termux + Shizuku + OpenClaw endpoint
这一节是全文的核心,所有配置片段都可以直接复制。按顺序来:先 Termux 基础环境,再 Shizuku 提权,最后 OpenClaw 的 endpoint 配置。
3.1 Termux 安装与 SSH 服务
第一件事:不要从 Google Play 装 Termux。Play 商店版本 API 级别被锁死,很多包装不上。去 F-Droid 或者 GitHub Releases 下载最新版 APK。装完后打开,先更新基础环境:
pkg update -y && pkg upgrade -y pkg install openssh nano curl jq -y授予存储访问权限,这样 Termux 能读到内部存储的导出文件:
termux-setup-storage设置 SSH 密码,注意 Termux 的 SSH 不走系统用户体系,密码是独立设置的:
passwd输入两遍密码。然后查看当前用户名,后面 SSH 连接要用:
whoami输出类似u0_a410,记下来。启动 sshd:
sshd默认监听 8022 端口。验证一下:
ss -tlnp | grep 8022看到 LISTEN 就对了。
3.2 Shizuku 激活与 rish 导出
去 Shizuku 的 GitHub 官方仓库下载 APK 安装。装完后,进系统设置 → 关于手机 → 连点版本号开启开发者选项,然后在开发者选项里打开「无线调试」。
打开 Shizuku App,它会引导你通过无线调试配对。按提示操作,配对成功后点「启动」。顶部显示「Shizuku 正在运行」即成功。
接下来导出 rish。在 Shizuku 里点「在终端应用中使用 Shizuku」→「导出文件」,导出到 Download 目录。然后回到 Termux:
cp ~/storage/downloads/rish ~/ cp ~/storage/downloads/rish_shizuku.dex ~/ chmod +x ~/rish chmod 400 ~/rish_shizuku.dex注意rish_shizuku.dex必须是 400 权限,Android 14+ 上如果给它写权限,app_process会拒绝加载,报Permission denied。
然后改 rish 脚本里的包名,把它指向 Termux:
sed -i 's/"PKG"/"com.termux"/g' ~/rish验证提权是否生效:
~/rish -c "id"如果输出uid=2000(shell),说明提权成功。再试一个实际命令:
~/rish -c "ls /sdcard/Android/data | head -n 5"能列出目录就说明穿透了 Scoped Storage。
3.3 OpenClaw endpoint 配置
OpenClaw 的配置文件通常是 JSON 或 TOML 格式,取决于你用的版本。下面给一份完整的 JSON 配置片段,路径按 OpenClaw 默认的~/.openclaw/config.json来:
{ "llm": { "provider": "openai-compatible", "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoToken密钥", "model": "claude-sonnet-4-20250514", "max_tokens": 4096, "temperature": 0.3 }, "agent": { "name": "android-remote", "system_prompt": "你是一个安卓设备管理助手,通过 SSH 连接到 Termux,使用 rish 提权执行命令。", "tools": ["shell", "file_read", "file_write"] }, "ssh": { "host": "127.0.0.1", "port": 8022, "username": "u0_a410", "password": "你的Termux密码" } }如果你用的是 TOML 格式(部分 OpenClaw 版本默认 TOML),等价配置如下:
[llm] provider = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "sk-你的TaoToken密钥" model = "claude-sonnet-4-20250514" max_tokens = 4096 temperature = 0.3 [agent] name = "android-remote" system_prompt = "你是一个安卓设备管理助手,通过 SSH 连接到 Termux,使用 rish 提权执行命令。" tools = ["shell", "file_read", "file_write"] [ssh] host = "127.0.0.1" port = 8022 username = "u0_a410" password = "你的Termux密码"三个关键字段必须对齐:Base URL 填https://taotoken.net/api,API Key 填你创建的那串,Model ID 填你要用的模型。这三个就是 OpenClaw 接入任何 OpenAI 兼容通道的三件套。
如果你用的是 Claude Code 而不是 OpenClaw,配置方式不同,参考 https://taotoken.net/doc 里的 ClaudeCodeAnthropic 接入说明。Cline MCP 场景也是类似的,Base URL + Key + Model ID 三件套填对就行。
3.4 国产 ROM 保活配置
这一步不做,前面全白搭。小米/澎湃、华为、OPPO 这些深度定制系统会 aggressively 杀后台。
进系统设置 → 应用管理 → Termux → 省电策略 → 设为「无限制」。Shizuku 同样操作。
然后在 Termux 里获取 wakelock,防止 CPU 休眠断连:
termux-wake-lock下拉通知栏能看到 Termux 的通知,说明 wakelock 生效。如果 SSH 连接还是超时,在前台跑调试模式:
sshd -d这样能看到连接日志,连上后再 Ctrl+C 转后台。实测这个办法对 MIUI 特别有效。
4. 验证请求:一次完整的远程接管动作
配置写完,现在验证整条链路通不通。分三层验证:模型通道、SSH 通道、提权通道。
4.1 验证 TaoToken 模型通道
先在 Termux 里用 curl 直接打 TaoToken 的 API,确认 Key 和 endpoint 没问题:
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-你的TaoToken密钥" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "回复OK两个字"}], "max_tokens": 10 }' | jq -r '.choices[0].message.content'如果输出OK,说明模型通道通了。如果报 401,检查 Key 有没有复制错;如果报 404,检查 Base URL 是不是多写了/v1。
4.2 验证 SSH 通道
从另一台设备(你的电脑或 OpenClaw 所在机器)连 Termux:
ssh -p 8022 u0_a410@手机IP手机 IP 在 Termux 里用ifconfig或ip addr查。连上后能看到 Termux 的欢迎信息就对了。
4.3 验证提权通道
在 SSH 会话里执行:
~/rish -c "id"输出uid=2000(shell)即提权正常。然后跑一个实际接管动作,比如列出所有 App 的缓存目录大小:
~/rish -c "du -sh /sdcard/Android/data/* 2>/dev/null | sort -rh | head -n 10"这个命令会输出占用最大的 10 个 App 数据目录。普通 Termux 用户执行会全部 Permission denied,走 rish 就能正常输出。
4.4 OpenClaw 端到端验证
现在让 OpenClaw 发一条指令,走完整链路。在 OpenClaw 所在机器上启动 agent:
openclaw run --config ~/.openclaw/config.json然后输入指令:
帮我列出安卓设备上占用空间最大的 5 个 App 数据目录,并给出清理建议。OpenClaw 会做这几件事:调用 TaoToken 的模型做规划 → 生成 shell 命令 → 通过 SSH 发到 Termux → Termux 用 rish 提权执行 → 结果回传 → 模型总结成自然语言。
如果一切正常,你会看到类似输出:
1. com.tencent.mm - 2.3G 2. com.taobao.taobao - 1.8G 3. com.zhihu.android - 1.2G ... 建议:微信缓存可清理 /sdcard/Android/data/com.tencent.mm/cache/ 下的临时文件...到这一步,整条「OpenClaw + Termux + Shizuku + TaoToken」链路就跑通了。你可以把这条指令固化成一个 OpenClaw 的 tool,以后一句话触发。
5. 本篇常见报错排查
这一节按真实报错来,每个都给出原因和修法。
5.1 401 Unauthorized
{"error":{"message":"Invalid API key","type":"invalid_request_error"}}原因:TaoToken 的 Key 填错、过期,或者复制时带了空格。检查config.json里的api_key字段,确保是完整的sk-开头字符串,前后无空格。如果 Key 泄露过,去 https://taotoken.net/api-keys 重新生成一个。
5.2 404 Not Found 或 reading choices 报错
{"error":{"message":"Not Found"}}或者 OpenClaw 日志里出现error reading choices。原因:Base URL 多写了/v1,导致请求路径变成/v1/v1/chat/completions。修法:把base_url改成https://taotoken.net/api,不要带/v1。框架会自动补全。
5.3 local proxy failed
Error: local proxy failed: dial tcp 127.0.0.1:7890: connect: connection refused原因:OpenClaw 或 Termux 里配了本地代理,但代理没启动。检查环境变量http_proxy、https_proxy、all_proxy,如果不需要代理就 unset 掉:
unset http_proxy https_proxy all_proxyTaoToken 的 API 直连即可,不需要额外代理配置。
5.4 rish 报 Permission denied
app_process: Permission denied原因:rish_shizuku.dex权限不对。Android 14+ 要求这个文件不可写:
chmod 400 ~/rish_shizuku.dex如果还不行,检查 rish 脚本里的包名有没有改成com.termux:
grep PKG ~/rish应该看到PKG="com.termux"。
5.5 SSH 连接超时或频繁断开
原因:国产 ROM 杀后台,或者 CPU 休眠。修法三步:省电策略设无限制、termux-wake-lock、必要时sshd -d前台保活。另外检查手机 WiFi 有没有开省电模式,有些 ROM 会在息屏后断 WiFi。
5.6 OAuth 相关报错
如果你用的是 Claude Code 而不是 OpenClaw,可能会遇到 OAuth 报错。Claude Code 的接入方式不同,需要在 settings 里配置 Anthropic 兼容的 endpoint,参考 https://taotoken.net/doc 里的 ClaudeCodeAnthropic 说明。核心还是三件套:Base URL、Key、Model ID。
5.7 模型返回空内容
OpenClaw 日志显示请求成功但choices[0].message.content为空。原因通常是max_tokens设太小,或者模型 ID 写错。检查model字段是不是有效的模型 ID,max_tokens至少给 1024。
6. 把链路固化成可复用工作流
跑通一次不算完,得让它能重复用。我的做法是在 OpenClaw 里定义几个固定 tool,把常用操作封装起来。
比如定义一个android_clean_cachetool,内部执行:
~/rish -c "find /sdcard/Android/data/*/cache -type f -mtime +7 -delete 2>/dev/null"再定义一个android_storage_reporttool,执行第 4 节那个du命令并让模型总结。
这样以后只需要说「清理安卓缓存」或「出一份存储报告」,OpenClaw 就会自动走完整链路。模型调用统一走 TaoToken 的通道,换模型只改一个model字段,Key 和 Base URL 不动。
如果你要长期跑 Agent 任务,建议上 Coding Plan,地址 https://taotoken.net/coding-plan ,比按量计费稳定。模型对话测试用 https://taotoken.net/chat ,接入文档在 https://taotoken.net/doc ,API Keys 管理在 https://taotoken.net/api-keys 。
最后提醒一个实际经验:Termux 的 sshd 在手机重启后不会自动启动,需要手动跑一次sshd。可以写个 Termux:Boot 脚本,开机自动拉起 sshd 和 wakelock。Shizuku 也需要每次重启后重新激活(除非你有 Root),这是非 Root 方案的固有代价,接受它就好。