把吃灰的旧安卓,变成 Codex 随叫随到的自动化云手机
闲置安卓机自带 CPU、电池和 Wi-Fi,天生就是一台绝佳的微型服务器。利用 Termux 打通无线 ADB,再挂上免费的 Cloudflare 隧道穿透内网,无需公网 IP 就能把手机直接接入云端。身处异地的云电脑打开网页就能实时看屏幕,终端里的 Codex 更能直接接管 ADB:自动截图看界面、算坐标点屏幕、代打字操作。不管是做自动化挂机还是当个人的 AI 物理执行节点,这套低成本玩法都极其顺手。
闲置安卓手机改造:Cloudflare 隧道 + Scrcpy 息屏控制 + 云电脑 Codex 自动化全流程手册
本手册介绍如何将闲置安卓手机改造成一台低功耗、免公网 IP 的远程云手机。整套方案采用 Cloudflare 隧道建立穿透连接,使远端云电脑中的 Codex 能够直接下发原生 ADB 指令执行全自动操作,同时支持利用 Scrcpy 的虚拟息屏机制,在手机物理屏幕彻底熄灭的状态下正常推流、截图与模拟点击,兼顾省电、防烧屏与全天候静默运行。
核心机制与架构设计
整个系统由被控端手机、Cloudflare 边缘中继网络以及云电脑控制端三部分组成。
家里闲置的安卓手机作为被控端,处于局域网环境并保持充电状态。手机系统开启无线调试端口 5555,并在内部 Termux 环境中运行两套核心服务:一是负责屏幕推流与虚拟控制的 Scrcpy 网页端服务,监听本地 8000 端口;二是 Cloudflare Tunnel 客户端,负责将本地的 5555 调试端口与 8000 网页投屏端口通过加密外发流量安全穿透至公网。
Cloudflare 边缘网络提供双通道路由解析:第一条为 TCP 路由,绑定固定子域名如 adb.yourdomain.com,专供云电脑中的 Codex 通过命令行下发 ADB 动作;第二条为 HTTP 路由,绑定固定子域名如 phone.yourdomain.com,供人工在任何浏览器中实时监视画面。
在控制端,云电脑通过本地运行的 cloudflared 客户端监听本地 5555 端口,将所有发送给本地回环地址的 ADB 数据透明中继到远端手机。Codex 可以直接在云电脑工作区调用 adb 截图、分析界面元素、换算坐标并注入点击、滑动与文本输入,实现完整的自动化闭环。
硬件与环境准备
配置前需准备以下条件:
- 闲置安卓手机一台,系统建议在 Android 9.0 或以上版本。
- 已经将主域名解析至 Cloudflare 的免费或付费账户。
- USB 数据线一条,仅用于初始阶段通过本地电脑激活手机的固定无线调试端口,设置完成后即可拔除。
- 一台已安装有 Codex 运行环境与 Android 调试工具 adb 的云电脑。
第一阶段:手机系统设置与息屏防断联优化
安卓系统默认会在息屏后几分钟内启动激进的省电机制,导致 CPU 深度休眠、Wi-Fi 断开以及后台进程被杀。为了让手机在物理黑屏状态下持续响应 Codex 的指令,必须提前做好系统级策略配置。
1. 移除锁屏密码与开启跳过锁屏
打开手机【设置】,进入【密码与安全】,彻底关闭锁屏密码、指纹与人脸解锁,将屏幕锁类型设为【无密码】或【滑动解锁】。
进入【开发者选项】,开启【直接进入系统】或【跳过屏幕锁定】选项。这样当系统被指令点亮或唤醒时,无需额外执行滑动解锁动作即可直接进入主屏幕。
2. 开启开发者选项与相关调试权限
在【设置】➔【关于手机】中连续点击【版本号】7 次激活开发者模式。
进入【开发者选项】开启以下关键开关:
- 开启【USB 调试】。
- 若使用的是小米、红米、OPPO、vivo 等品牌机型,必须开启【USB 调试(安全设置)】,否则系统会直接拦截任何来自 ADB 的模拟点击、拖拽与键盘输入。
- 检查 Wi-Fi 设置,确保【休眠状态下保持 Wi-Fi 连接】处于始终开启状态。
查看当前手机已连接的局域网 Wi-Fi 详情,记录手机获得的内网 IP 地址,例如 192.168.1.50。
3. 配置 Termux 后台常驻权限
从 F-Droid 或 GitHub Releases 下载安装最新版 Termux 应用,切勿使用应用商店中已停止维护的旧版本。
进入手机系统【应用管理】,找到 Termux:
- 将电池优化或省电策略设置为【无限制】或【不优化】。
- 开启【自启动】与【后台弹出界面】权限。
第二阶段:电脑端激活手机固定无线 ADB
安卓系统的原生无线调试端口在初次使用时需要通过有线方式固定为 5555 端口。
- 使用数据线将手机连接到手边的电脑。
- 打开电脑终端,执行连接检测命令:
adb devices
手机屏幕会弹出允许 USB 调试的授权弹窗,勾选“始终允许来自这台计算机的调试”并确认。
- 在电脑终端执行命令,将手机调试端口锁定为 TCP 模式的 5555 端口:
adb tcpip 5555
- 执行完成后拔除 USB 数据线。在电脑终端测试无线连接:
adb connect 192.168.1.50:5555
当控制台返回 connected to 192.168.1.50:5555 时,表示手机无线调试通道已成功开启。
第三阶段:手机 Termux 部署推流服务与息屏控制
打开手机上的 Termux 应用,通过命令行搭建基础运行环境。
1. 申请 CPU 唤醒锁与安装基础组件
在 Termux 终端中依次执行以下命令:
# 申请系统唤醒锁,这是手机在黑屏状态下 CPU 不休眠、网络不中断的核心
termux-wake-lock
# 更新基础软件包列表
pkg update -y && pkg upgrade -y
# 安装 Node.js 运行环境、Git、安卓平台工具及常用网络软件
pkg install git nodejs-lts android-tools openssh wget -y
2. 手机本地回环连接 ADB
由于手机本身已处于 5555 端口监听状态,Termux 可以在系统内部通过回环地址直接连接自身:
adb connect 127.0.0.1:5555
若手机弹出调试授权框,勾选始终允许并点击确认。
3. 部署并启动 Web 版 Scrcpy 服务
我们选用开源的 ws-scrcpy,它基于 WebSocket 和 H.264 解码,支持远程网页控制与底层 Scrcpy 协议参数联动:
git clone --depth=1 https://github.com/NetrisTV/ws-scrcpy.git
cd ws-scrcpy
npm install
npm run build
npm start
服务启动后默认监听手机本地的 8000 端口。
4. 安装 Cloudflare 隧道客户端
在 Termux 中新开一个会话窗口,执行以下命令安装官方工具包:
pkg install cloudflared -y
第四阶段:配置 Cloudflare 隧道双通道路由
本阶段在电脑浏览器中访问 Cloudflare Zero Trust 后台进行配置,将手机本地的服务映射为公网安全域名。
1. 创建隧道并获取启动令牌
- 登录 Cloudflare Zero Trust 控制台。
- 依次点击左侧导航栏的 Networks ➔ Tunnels ➔ Add a tunnel。
- 选择 Cloudflared 部署类型,点击 Next。
- 为隧道指定名称,例如 android-agent,点击 Save tunnel。
- 运行环境选择 Linux (arm64),页面下方会自动生成一行包含专属 Token 的启动指令。
- 将这行命令复制到手机 Termux 终端中回车执行:
cloudflared tunnel run --token 你的真实令牌字符串
当网页端显示连接器状态已变为绿色的 Active 后,点击 Next 进入公网路由配置。
2. 添加第一条路由:供 Codex 操控的 ADB TCP 通道
在 Public Hostname 标签页中添加第一条记录:
- Subdomain:输入 adb。
- Domain:选择你的托管主域名,例如 yourdomain.com。
- Service Type:选择 TCP。
- URL:填入手机本地 ADB 端口 127.0.0.1:5555。
保存后,获得该通道的公网访问地址:adb.yourdomain.com。
3. 添加第二条路由:供人工监视的 Web 投屏通道
点击 Add a public hostname 添加第二条记录:
- Subdomain:输入 phone。
- Domain:选择你的托管主域名,例如 yourdomain.com。
- Service Type:选择 HTTP。
- URL:填入推流服务本地端口 127.0.0.1:8000。
保存后,获得人工监控页面的公网访问地址:https://phone.yourdomain.com。
第五阶段:云电脑侧中继与 Codex 命令行接管
此阶段在云电脑中执行,建立本地与远端手机之间的加密中继隧道。
1. 云电脑端启动 cloudflared TCP 端口映射
云电脑中需提前下载安装 cloudflared。打开云电脑终端,执行以下命令将公网 TCP 隧道拉回云电脑本地:
cloudflared access tcp --hostname adb.yourdomain.com --url 127.0.0.1:5555
该进程会持续在云电脑本地监听 5555 端口,并将所有流经此端口的 ADB 请求通过 Cloudflare 加密转发给手机。建议将此命令保持在后台运行。
2. 验证云电脑 ADB 控制权
在云电脑中新开一个终端窗口,执行连接指令:
adb connect 127.0.0.1:5555
adb devices
终端输出中如果显示 127.0.0.1:5555 device,表示云电脑本地环境已经完整接管家里这台安卓手机的底层控制权。
第六阶段:Scrcpy 虚拟息屏与 Codex 自动化操作闭环
手机长期作为服务器放置时,物理屏幕若一直常亮会造成严重的电池发热、损耗和 OLED 烧屏问题。结合 Scrcpy 与 ADB 的底层机制,可以在物理屏幕完全熄灭的状态下实现正常的自动化作业。
1. 两种息屏控制方案对比与选择
第一种方案是原生 ADB 的按需唤醒与休眠。在平时手机处于完全熄灭状态,当 Codex 需要操作时,先发送唤醒按键广播,操作完毕后再发送息屏广播:
# 唤醒屏幕 (屏幕点亮)
adb shell input keyevent 224
# Codex 执行截图、点击或打字操作...
# 任务结束后熄灭屏幕
adb shell input keyevent 223
第二种方案是 Scrcpy 的虚拟息屏机制(关闭物理背光)。如果在电脑端使用 scrcpy 客户端直连,可以附带 --turn-screen-off 参数:
scrcpy --turn-screen-off
该参数的作用是直接关闭手机的物理显示背光,手机表面呈现完全断电一般的全黑状态,但手机 GPU 依然照常渲染界面图像,触摸芯片与 ADB 虚拟输入通道也全部正常运作。此时云电脑截取的画面依然是全彩高分辨率原图,Codex 也可以在纯黑屏状态下持续进行点击、滑动与文本输入。
2. Codex 自动化操作三步闭环
当云电脑连通后,Codex 可在工作区按序执行以下三步闭环:
环节一:视觉感知(静默截取当前画面)
Codex 执行命令将手机即时界面截取并拉回云电脑工作区:
adb exec-out screencap -p current_screen.png
Codex 读取并分析截取的图像,识别当前应用所在的页面层级、输入框位置与交互按钮。
环节二:坐标定位与路径决策
根据图像信息,大模型计算出目标控件的屏幕像素坐标,例如确定微信输入框的中心点坐标为横坐标 540、纵坐标 2100,发送按钮为横坐标 950、纵坐标 2100。
环节三:动作下发与指令注入
Codex 直接发送对应的底层操作指令:
- 模拟屏幕点击:
adb shell input tap 540 2100
- 模拟屏幕滑动与滚动(参数前两项为起点坐标,中间两项为终点坐标,最后一项为滑动持续毫秒数):
adb shell input swipe 500 1600 500 400 300
- 输入英文字符与数字:
adb shell input text "test_message_123"
- 输入中文文本(推荐预先在手机上安装开源的 ADBKeyBoard 并设为默认输入法,之后通过广播方式快速注入中文字符串):
adb shell am broadcast -a ADB_INPUT_TEXT --es msg "您好,这是由云电脑Codex自动执行的操作"
- 模拟系统返回键与主屏键:
# 返回手机桌面 (Home)
adb shell input keyevent 3
# 返回上一级界面 (Back)
adb shell input keyevent 4
第七阶段:手机一键自启脚本配置
为避免手机由于意外断电重启后需要逐行敲命令,在手机 Termux 的用户主目录中配置一个开机一键启动脚本。
在 Termux 终端中执行以下内容:
cat << 'EOF' > ~/start.sh
#!/data/data/com.termux/files/usr/bin/bash
termux-wake-lock
echo "正在建立本地 ADB 连接..."
adb connect 127.0.0.1:5555
echo "正在启动 Web 投屏推流服务..."
cd ~/ws-scrcpy
nohup npm start > ~/scrcpy.log 2>&1 &
echo "正在启动 Cloudflare 隧道..."
# 请把下方的 YOUR_TUNNEL_TOKEN 替换为 Cloudflare 后台生成的真实令牌字符串
nohup cloudflared tunnel run --token YOUR_TUNNEL_TOKEN > ~/cf.log 2>&1 &
echo "所有后台服务已全部启动完毕!"
EOF
chmod +x ~/start.sh
后续手机一旦发生重启,只需点开一次手机上的 Termux 应用并输入:
./start.sh
所有后台常驻服务、双通道加密穿透隧道即会自动在后台恢复就绪,手机可随时熄灭屏幕静置工作。