旧安卓手机跑 OpenClaw:中文版部署、飞书接入、ADB 控制与公网 SSH 全流程

前言
我一开始只是想试一件事:一部已经闲置的安卓手机,能不能真的把 OpenClaw 跑起来,而且不是只在手机里开个网页聊天,而是让它变成一台能长期待机、能从外面发消息调用、甚至还能反过来操作这台手机的 AI 智能体主机?
这一折腾,前后用了我 3 天。
我先基于 mithun50 的 openclaw-termux 做了中文整合版,把界面、安装流程和常用配置入口整理到 APK 里;随后又把模型接上、把飞书机器人跑通,再继续往下试 ADB 无线调试。真正让我觉得“这台旧手机有点意思了”的,是我在飞书里发一句话,它能让手机打开相机、执行操作,再把结果发回来。
做到这里以后,我又遇到了新的麻烦:真要长期跑,手机小屏调试太难受。于是我继续补了 SSH,最后再用 cpolar 把 8022 端口带到公网。
所以这篇不是单纯的“安卓安装 OpenClaw”。我把自己这几天真正走过的链路完整整理下来:
安装中文整合版 → 配置大模型 → 网页对话验证 → 接入飞书 → ADB 无线调试 → 实际控制手机 → 安装 SSH → 局域网远程管理 → cpolar 公网 SSH。
1. 我这次在安卓上跑的 OpenClaw 是什么?

OpenClaw 是一个开源 AI 智能体平台。它和普通聊天页面最大的区别,是除了对话,还可以继续调用文件、命令、脚本和其他工具。
安卓这条线并不是 OpenClaw 原生直接跑在 Android 里,而是借助 openclaw-termux,通过 Flutter + proot Ubuntu 把运行环境封装到手机上,而且不要求 root。
上游项目本身是英文界面。我这次不是直接照搬安装,而是在它的基础上 fork 了一版中文整合包,把安装、模型配置和后面用到的飞书入口一起往前做了。
我测试时已经迭代到 v1.8.7:
| v1.8.5 | 完成 i18n 汉化整合,支持简中/繁中/日文,合并上游最新代码 |
| v1.8.6 | 优化安装进度显示(不再"卡住不动")、新增日志清空工具、修复 WebSocket 心跳、新增发布构建脚本 |
| v1.8.7 | 新增自定义 OpenAI 兼容提供商配置、新增飞书消息平台接入页、优化网关日志可读性、支持自动迁移旧配置 |
对我来说,这几个版本的目标其实很明确:尽量把原来必须进终端改配置的事情,往手机图形界面里挪。
2. 先准备一台适合折腾的安卓手机
2.1 我实际测试的手机
我这次用的是 iQOO Neo 5:

测试配置如下:
| 机型 | iQOO Neo 5 |
| 内存 / 存储 | 12GB + 256GB |
| 系统版本 | Android 14 |
项目说明里的最低要求是:
- 系统版本:Android 10+(API 29 及以上)
- 存储空间:首次安装建议预留约 500MB 及以上可用空间
- 网络环境:首次初始化需要联网下载 Ubuntu rootfs + Node.js 等依赖
这里我还是要把风险放在前面。
OpenClaw 后面如果开放命令执行、文件读写,再配上 ADB,本身就已经不是一个“只会聊天”的 App。上游旧版本 issue 也出现过误删手机文件的问题;v1.8.4 之后虽然已经修复并不再强求所有文件管理权限,但我这次仍然更建议用闲置备用机。
我的做法也是把它当实验机,而不是把照片、工作文件、聊天记录全放在同一台手机上再去测试 AI 操作。
2.2 从 GitHub Releases 下载
我自己的中文整合版 Releases 地址是:
https://github.com/JunWan666/openclaw-termux-zh/releases
打开 Releases:

在 Assets 里选择对应架构的 APK:

2.3 云盘方式
架构不知道怎么选时,我更倾向先下 `universal`;想减小体积,再按设备架构选择。
| 文件名 | 适用场景 |
| ——————————— | ——————————– |
| `OpenClaw-v1.8.7-arm64-v8a.apk` | 主流 64 位手机(推荐) |
| `OpenClaw-v1.8.7-armeabi-v7a.apk` | 较老的 32 位手机 |
| `OpenClaw-v1.8.7-x86_64.apk` | 模拟器 / x86 设备 |
| `OpenClaw-v1.8.7-universal.apk` | 通用版,兼容所有架构(体积较大) |

这里我保留一个当时的版本说明:云盘里写的是上游最新 `v1.8.4`,同时放了我自己的 `v1.8.5~1.8.7`。这几个版本号我按当时记录保留,不在这里自行改写。
## 3. 安装以后,先解决“手机别把它杀掉”
### 3.1 安装 APK 与后台保活
APK 安装完成后,图标如下:

OpenClaw 真要在手机上长期跑,第一件事不是马上配模型,而是尽量避免它被系统后台策略干掉。
我这台是 vivo / iQOO,所以先把后台耗电运行放开:

然后把开机自启也打开:

不同品牌菜单名称会不一样,但我自己的判断标准只有一个:**网关要长期收飞书消息,App 就不能动不动被系统清理。**
### 3.2 第一次安装运行环境
首次启动:

点击【开始安装】后,应用自动完成:
1. 下载并解压 **Ubuntu RootFS**
2. 安装基础依赖
3. 安装 **Node.js**
4. 安装 **OpenClaw** 网关

我这次初始化时需要联网下载约 **500MB** 左右的数据,整个过程记录为约 **5~10 分钟**。这部分不要着急退出,等进度走完。
安装完成:

到这里,我才把“安卓能跑 OpenClaw”这件事确认下来。
## 4. 先把模型接通,再谈智能体
### 4.1 配置第一个 AI 模型
环境装好以后,OpenClaw 还不能直接干活,先要接入模型。
我从【配置 API Key】进入终端:

风险提示界面选择【Yes】,再按【ENTER】:

继续在【QuickStart】回车,进入【Model/auth provider】:

我当时对比过 MiniMax、Qwen、硅基流动等选项,最后这次流程使用的是硅基流动。
注册入口:
```shell
https://cloud.siliconflow.cn/i/TGbSCR57

登录后,当时活动中心可以看到对应奖励信息:

然后到【API密钥】创建密钥:

创建后复制:

回到 OpenClaw,我在终端里选择【Custom Provider】:

再填写 API Base URL、API Key 等配置:

消息平台这一步先选【Skip for now】:

搜索服务也先跳过:

Skills 这里选择【NO】:

到【Enable hooks】时,我这次选择了全部:

然后等待网关安装:

出现【前往控制台】,说明这轮模型和网关配置完成。
4.2 我先用一段实际对话确认它真的跑起来
回到首页,点击启动网关:

我先看日志:

网关正常以后,首页显示【运行中】,地址里也带有 token:

进入 Web UI 后,我没有只看页面,而是直接问:
你好呀,你是谁,你当前运行在什么操作系统上面,接入的是什么大模型?请你详细的回答我

它能正常回答以后,我才把“模型接入成功”算作跑通。
4.3 后来我又把模型切换入口做得更顺手
原本切模型可以进终端改配置,或者跑 openclaw configure。我自己用下来觉得太绕,所以在【AI提供商】里把入口前移,并加了【自定义 OpenAI 兼容】。
进入【AI提供商】:

选择【自定义提供商】:

我当时还准备了一组中转服务测试信息:

配置记录如下:
# API 基础地址 (Base URL)
https://codex.0u0o.com/v1
# 身份验证密钥 (API Key)
sk-da476c6606b09d3be2b417cdcaecaa92bfcc0247273d74c089185a24e6bce0fa
# 指定使用的模型名称
gpt-5.4
这段配置里包含明文 API Key,我按当时技术记录原样保留;如果文章准备公开发布,建议在发布前自行确认这组密钥是否还应该继续公开。
填写后的界面:

保存并激活:

日志里能看到配置刷新:

我再问:
你现在是什么模型,你看一下

当时返回的模型已经变成 gpt-5.4。
到这里,我解决的是“OpenClaw 能跑、模型能换”。真正让我折腾了更久的,是下一步——把它接进飞书。
5. 我花时间最多的一步:把 OpenClaw 接进飞书
5.1 先把飞书机器人建起来

登录后进入【开发者后台】:

创建企业自建应用:

填写应用名称、描述和图标:

创建后添加【机器人】能力:

再设置机器人名称:

然后进入【权限管理】,点击【批量导入】:

我当时导入的是下面这份权限 JSON:
{
"scopes": {
"tenant": [
"aily:file:read",
"aily:file:write",
"application:application.app_message_stats.overview:readonly",
"application:application:self_manage",
"application:bot.menu:write",
"cardkit:card:write",
"contact:user.employee_id:readonly",
"corehr:file:download",
"docs:document.content:read",
"event:ip_list",
"im:chat",
"im:chat.access_event.bot_p2p_chat:read",
"im:chat.members:bot_access",
"im:message",
"im:message.group_at_msg:readonly",
"im:message.group_msg",
"im:message.p2p_msg:readonly",
"im:message:readonly",
"im:message:send_as_bot",
"im:resource",
"sheets:spreadsheet",
"wiki:wiki:readonly"
],
"user": ["aily:file:read", "aily:file:write", "im:chat.access_event.bot_p2p_chat:read"]
}
}
粘贴后继续下一步:

申请开通:

确认:

权限完成后,到【凭证与基础信息】复制:
- App ID
- App Secret

接着回到我做的 OpenClaw 安卓版,进入【接入消息平台】:

选择【飞书】:

把 App ID 和 App Secret 填进去,保存:

然后我回首页把网关停掉,再启动一次,看日志:

出现【Gateway is healthy】以后,我再回飞书开放平台。
事件订阅方式改成【长连接】:

这里有个关键前提:如果 OpenClaw 网关没有启动,或者飞书渠道还没加好,长连接保存会失败。
接下来添加【接收消息】事件:

再进入【版本管理与发布】,创建版本:

填写版本号、更新说明和可用范围:

最后确认发布:

做到这里,机器人应用才算真正具备后面测试的条件。
5.2 第一次发消息,还要做一次配对授权
飞书客户端下载地址:
https://www.feishu.cn/download
安装并登录后,在【开发小助手】里能看到刚发布的机器人:

第一次发消息时,我收到的是一段授权提示:
OpenClaw: access not configured.
Your Feishu user id: ou_415413aace1ec226fa05abbac8de1e6b
Pairing code: PDTJ8KKR
Ask the bot owner to approve with:
openclaw pairing approve feishu PDTJ8KKR

然后需要执行授权命令:
openclaw pairing approve feishu PDTJ8KKR

我这里保留一个当时操作记录里的环境差异:记录中写过“回到 Mac mini 的终端”,但这篇主线实际又包含安卓端和 Windows PowerShell。为了不把我没重新验证过的环境擅自统一,这里只保留真正执行的授权命令本身。
授权完成后,我再回飞书发消息:

这次机器人已经能正常回复。
到这里,我这 3 天里最关键的第一段闭环终于成立了:
手机里跑 OpenClaw → 飞书发消息 → 手机上的网关收到 → 模型处理 → 飞书收到回复。
6. 只会聊天还不够,我继续把 ADB 接上
6.1 为什么我要开无线调试

我继续折腾 ADB,是因为如果 OpenClaw 只在飞书里聊天,它和普通 AI 助手的差异还不够大。
无线调试本质上是 Android 的 ADB 通过 TCP/IP 建立连接。这里涉及:
- ADB Client
- ADB Server
- adbd
启用无线调试后,设备会给出动态端口,并通过配对码或密钥完成认证。
我真正想要的是:让 OpenClaw 不只“说”,还能对这台手机“动手”。
6.2 开启无线调试
以我这台 vivo / iQOO 为例,先在【关于手机 → 版本信息】里多次点击软件版本号,打开开发者模式:

再进入开发者选项,打开无线调试:

我当时记录的示例信息是:
# 无线调试地址和端口
192.168.50.225:38687
# 配对码
08225
# 配对码的地址和端口
192.168.50.225:42515

需要注意,配对窗口关闭后,配对码和端口可能变化,所以我后面实际配对时没有提前退出。
另外,这里的记录里先写过配对码 08225,后面实际对话里又使用了 088225。两个值不一致,我没有替自己猜哪一个应该被改掉,继续按当时记录保留。
6.3 先把工具集切到 full
OpenClaw 用 tools.profile 控制可以使用的工具范围:
| minimal | 只开放 session_status 工具 | session_status |
| coding | 编程模式(默认) | 文件读写、执行命令、会话、内存、图片相关 |
| messaging | 消息模式 | 消息发送、会话列表/历史/发送、session_status |
| full | 全工具模式 | 所有工具(等同于未设置) |
为了继续测试消息、浏览器、文件和手机控制,我执行:
# 切换到 full 工具集
openclaw config set tools.profile full

然后重启网关。
full 的权限明显更大,我自己的使用原则仍然是:只在受信任环境和测试机上开,不把这种权限交给不受信任的人。
6.4 我直接让飞书里的 OpenClaw 自己装 ADB
前面飞书已经跑通,所以后面我尽量不再回手机里一项项敲命令。
我直接在飞书里发:
请你在你当前运行的操作系统上安装一个ADB工具,我稍后要做无线调试功能,你安装好后,我会给你发无线调试地址和端口以及配对码

ADB 装好以后,我把前面记录的无线调试信息发给它:
我的无线调试地址和端口是<192.168.50.225:38687>,然后配对码的地址和端口是<192.168.50.225:42515>,最后,配对码是:<088225>

连接成功后,手机“已配对设备”里能看到新增的 @localhost 设备。
到这里,第二段闭环也成立了:
飞书 → OpenClaw → ADB → 当前这台安卓手机。
7. 接上 ADB 以后,我实际试了两件事
7.1 让它打开相机、拍照并把结果发回飞书
我先测试的是拍照:
帮我打开相机,延时 3 秒拍一张照片,然后把照片文件传给我在飞书上看一眼。

实际结果是它成功打开了相机,也把结果发回来了。
我当时观察到,发回来的内容看起来更像截图,而不是我一开始想象的原始照片文件。这个结果并不完美,但它至少证明“远程消息 → 控制手机 → 结果回传”已经跑通。
GIF 记录:

这一段我不打算美化成“一次就完美实现自动摄影”。真实情况就是:能做,但结果形态还需要继续调。
7.2 让它打开抖音并模拟滑动
第二个测试更直接。
我让它:
帮我打开‘抖音’,每隔 5 秒向上滑动一次屏幕,模拟刷短视频的操作,循环执行 3 次。
执行效果:

它确实打开了抖音,但因为手机没有登录,页面弹出了登录窗口,它还是照着原指令继续滑。
这个细节反而很像真实智能体:命令执行了,但它没有自动理解所有界面状态。
我手动关掉登录弹窗后,又补了一句:
继续刷2次,屏幕上有一个登录弹出,你刚才没有给我叉掉,导致只刷了一次,我叉掉了弹窗

这次它继续滑动了两次。
所以我对这类手机控制的判断并不是“AI 已经可以像人一样完全接管手机”,而是:
OpenClaw + ADB 已经能把自然语言转成一部分可执行的手机操作,但页面状态、弹窗、权限和具体 App 行为仍然会影响结果。
8. 真正长期用,我最先受不了的是手机小屏
ADB 能玩以后,我很快遇到了一个更现实的问题。
手机上看日志、改配置、排错,短时间可以,长期真的难受。
而这套安卓 OpenClaw 里本来就跑着 Ubuntu,所以我干脆继续加 SSH。这样在家里时,我直接用电脑键盘和大屏管理它,不再一直低头戳手机。
8.1 安装 OpenSSH
在首页快捷操作里找到【可选组件】:

选择【OpenSSH】:

等到终端出现【Done】:

SSH 服务安装完成。
8.2 从电脑连进这台手机
回首页,进入【SSH访问】:

默认端口是:
8022
然后设置密码并启动服务:

页面会给出连接命令:
ssh root@192.168.50.225 -p 8022

我在同一局域网的 Windows 电脑上打开 PowerShell:

执行同一条 SSH 命令:
ssh root@192.168.50.225 -p 8022

连接成功以后,这台手机里的 Ubuntu 对我来说就更像一台普通 Linux 主机了。
这一步解决的是我自己的实际痛点:不是为了多一个功能,而是为了调试时不用再和小屏幕较劲。
9. 局域网 SSH 好用了,我又想在外面也能连
在家里通过 192.168.50.225:8022 连没有问题。
但如果手机长期放家里跑 OpenClaw,我人在公司或外地,还想进终端看日志、改配置,局域网 SSH 就够不到了。
这才是我后面接 cpolar 的原因。
9.1 cpolar 在这里负责什么

这篇后半段里,cpolar 的角色很单一:
把手机 Ubuntu 里的 SSH 8022 端口映射出去。
它不负责 OpenClaw 推理,不负责飞书,不负责 ADB;这里只解决“我在外面怎么 SSH 进这台手机”。
9.2 在手机 Ubuntu 里安装 cpolar
我回到 PowerShell 终端,执行:
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | bash

这个 Ubuntu 环境里没有 systemd,所以我当时没有用常见的 systemd 自启动方式,而是往 ~/.bashrc 里加了一段“伪自启动”逻辑:
cat << 'EOF' >> ~/.bashrc
# — Cpolar 自动化守护逻辑 —
if ! pgrep -x "cpolar" > /dev/null; then
echo "正在初始化 Cpolar 环境…"
nohup cpolar start-all -daemon=on -dashboard=on -config=/usr/local/etc/cpolar/cpolar.yml -log=/var/log/cpolar/access.log > /dev/null 2>&1 &
echo "Cpolar 已在后台运行 (Web 面板端口:9200)"
fi
# —————————
EOF
然后执行:
source ~/.bashrc

接着在浏览器访问手机局域网地址 + 9200:

cpolar Web UI 能打开以后,再继续做 SSH 隧道。
10. 把 8022 真正带到公网
10.1 随机 TCP 地址
cpolar 默认隧道里已经有一个 ssh 隧道,但默认指向 22,而我这里 OpenSSH 实际使用的是 8022。
可以发现,cpolar默认的隧道已经有了我们需要的ssh隧道,但是我们的端口是【8022】,所以需要点击【编辑】按钮进行修改:
所以先编辑 ssh 隧道:

把本地端口改成:
8022

更新以后,到在线隧道列表查看随机 TCP 地址。
我当时得到的是:
tcp://1.tcp.cpolar.top:11491

对应 SSH 测试命令:
ssh root@1.tcp.cpolar.top -p 11491
后面的截图记录:

这里同样有一个当时记录里的端口不一致:公网地址和命令使用的是 11491,但旁边说明文字又出现过 10907。我没有把它们擅自统一;真正执行时应该以自己在线隧道列表里实时生成的地址和端口为准。
到这一步,我已经能从公网 SSH 进这台手机。
10.2 固定 TCP 地址
随机 TCP 地址适合临时调试,但这篇记录里说明它大约每 24 小时会变化一次。
如果手机准备长期放家里跑,我显然不想每次先查新端口。
所以继续进入预留页面:

往下找到固定 TCP 地址,保留以后,我这次记录的是:
- 地区:China Top
- 地址: 6.tcp.cpolar.top:14267

然后回到【隧道列表】,编辑 ssh:

把端口类型改成【固定TCP端口】,填入刚才保留的 TCP 地址:

再去在线隧道列表确认:

最后执行:
ssh root@6.tcp.cpolar.top -p 14267

固定地址也能连通。
这时整条链才真正闭合:
闲置安卓手机 → OpenClaw → 飞书 → ADB → SSH → 公网固定 TCP。
总结
这 3 天折腾下来,我对这套东西的判断和刚开始不太一样。
一开始我只是觉得“安卓手机也能跑 OpenClaw”挺新鲜;真正让我愿意继续往下做的,是每解决一个问题,下一层使用方式就会自然冒出来。
手机能跑 OpenClaw,于是我想把模型接通; 模型能对话,我又不想每次都进手机 Web UI; 飞书能发消息,我就继续试 ADB,让它真正操作手机; ADB 能控制,调试又开始嫌手机屏幕太小; SSH 能进 Ubuntu,我又希望离开家也能连接; 最后才有了 的随机和固定 TCP 入口。
这也是我更愿意把这篇叫“完整实战”,而不是“OpenClaw 安卓安装教程”的原因。
我实际跑通的链路包括:
- iQOO Neo 5 / Android 14
- OpenClaw 中文整合版 v1.8.7
- openclaw-termux
- Ubuntu RootFS
- Node.js
- Custom Provider
- Web UI 对话
- 模型切换到 gpt-5.4
- 飞书 App ID / App Secret
- 飞书长连接
- Pairing 授权
- tools.profile full
- ADB 无线调试
- 拍照 / 回传测试
- 抖音滑动测试
- OpenSSH
- 8022
- 局域网 SSH
- cpolar 9200
- 随机 TCP
- 固定 TCP
- 6.tcp.cpolar.top:14267
但我也不会因为这些步骤都跑通,就把它写成“旧手机已经彻底变成无人值守 AI 云服务器”。
实际使用里仍然有很明确的边界:
- Android 后台保活依赖手机系统策略;
- full 工具集权限很高;
- ADB 控制会被弹窗、登录状态、权限和页面变化影响;
- 拍照回传这次结果更像截图;
- 原操作记录里还有配对码、随机 TCP 端口等不一致;
- 文章里那组中转 API Key 是明文配置,公开发布前应该单独确认是否继续暴露;
- 这类智能体测试机不适合同时存放重要个人数据。
对我来说,这次真正有价值的不是“手机变服务器”这个噱头,而是我终于把一台闲置安卓机从只能自己打开 App 使用,一步步改成了能通过飞书远程调用、能执行手机操作、也能从外网进 SSH 继续维护的一台实验型 AI 主机。



