一、前言
1.1 什么是云手机
云手机依托服务器虚拟化、容器化技术,在云端部署完整安卓系统,通过网络推流画面、下发触控指令,实现本地设备远程操控云端安卓实例。区别于本地模拟器,云手机具备 7×24 小时离线运行、不占用本机电量 / 存储、批量多开、独立 IP 隔离等优势,广泛用于手游挂机、APP 自动化测试、账号矩阵运营、移动端 RPA 等场景。
1.2 适用人群
- 手游玩家:多账号养号、离线刷副本、资源挂机
- 测试开发:APP 兼容性批量测试、UI 自动化脚本调试
- 运营从业者:短视频 / 社群多账号矩阵管理
- 爬虫 / 自动化开发者:基于 ADB+API 实现批量设备调度
1.3 技术架构简述
主流商用云手机平台均提供两套交互能力:
- HTTP REST API:用于设备创建、状态查询、批量管理、应用安装等异步操作
- WebSocket 长连接:实时下发点击、滑动、输入等触控指令,低延迟画面推流 本文基于通用云手机 API 规范,提供可直接改造落地的 Python 完整代码,无需底层虚拟化搭建,对接商用平台即可运行。
二、环境依赖准备
2.1 安装 Python 依赖库
bash
运行
pip install requests websocket-client json time logging
- requests:处理 HTTP 接口请求
- websocket-client:建立长连接下发实时触控指令
- logging:记录设备运行日志,方便排错
三、完整代码实战
3.1 通用 API 封装类(设备查询、批量管理、应用安装)
python
运行
import requests
import json
import logging
import hashlib
from typing import List, Dict
# 日志配置
logging.basicConfig(
filename="cloud_phone_run.log",
level=logging.INFO,
format="%(asctime)s | %(levelname)s | %(message)s",
encoding="utf-8"
)
# 云平台基础配置(替换为商用平台密钥)
API_BASE = "https://api.cloudphone.service.com"
ACCESS_KEY = "your_access_key"
SECRET_KEY = "your_secret_key"
TIMEOUT = 10
class CloudPhoneApi:
def __init__(self):
self.session = requests.Session()
# 生成接口签名,商用平台通用鉴权逻辑
def get_sign(self) -> str:
raw_str = f"{ACCESS_KEY}{SECRET_KEY}"
sign = hashlib.md5(raw_str.encode("utf-8")).hexdigest()
return sign
# 请求统一请求头
def get_headers(self) -> Dict:
return {
"AccessKey": ACCESS_KEY,
"Sign": self.get_sign(),
"Content-Type": "application/json"
}
# 获取名下全部云手机设备列表
def get_all_devices(self) -> List[Dict]:
url = f"{API_BASE}/device/list"
try:
resp = self.session.get(url, headers=self.get_headers(), timeout=TIMEOUT)
data = resp.json()
if data.get("code") == 0:
dev_list = data.get("data", [])
logging.info(f"获取设备列表成功,共{len(dev_list)}台云手机")
return dev_list
else:
logging.error(f"获取设备失败:{data.get('msg')}")
return []
except Exception as e:
logging.error(f"接口请求异常:{str(e)}")
return []
# 查询单台设备在线状态、延迟、电量
def get_device_status(self, device_id: str) -> Dict:
url = f"{API_BASE}/device/status"
params = {"deviceId": device_id}
try:
resp = self.session.get(url, headers=self.get_headers(), params=params, timeout=TIMEOUT)
return resp.json()
except Exception as e:
err_msg = f"设备{device_id}状态查询失败:{str(e)}"
logging.error(err_msg)
return {"code": -1, "msg": err_msg}
# 云端静默安装APP
def install_app(self, device_id: str, package_name: str) -> bool:
url = f"{API_BASE}/device/{device_id}/app/install"
body = {
"package": package_name,
"silent": True
}
try:
resp = self.session.post(url, headers=self.get_headers(), json=body, timeout=TIMEOUT)
res = resp.json()
if res.get("code") == 0:
logging.info(f"设备{device_id}安装{package_name}指令下发成功")
return True
else:
logging.error(f"安装失败:{res.get('msg')}")
return False
except Exception as e:
logging.error(f"安装接口异常:{str(e)}")
return False
# 测试入口
if __name__ == "__main__":
client = CloudPhoneApi()
# 1. 获取所有设备
device_list = client.get_all_devices()
# 2. 遍历查询每台设备状态
for dev in device_list:
dev_id = dev.get("deviceId")
status_info = client.get_device_status(dev_id)
print(json.dumps(status_info, ensure_ascii=False, indent=2))
# 3. 示例:给指定设备安装游戏包
# client.install_app(dev_id, "com.mihoyo.hyperion")
3.2 WebSocket 实时触控指令脚本(点击、滑动、挂机循环)
python
运行
import websocket
import json
import time
# 长连接配置
WS_URL = "wss://ws.cloudphone.service.com/control"
DEVICE_ID = "dev_0001"
WS_TOKEN = "your_ws_connect_token"
def on_message(ws, message):
"""接收云端设备执行回调"""
callback_data = json.loads(message)
print("云端返回执行结果:", callback_data)
def on_error(ws, error):
print("WebSocket连接异常:", error)
def on_close(ws, close_code, close_msg):
print("长连接已断开,关闭码:", close_code, "信息:", close_msg)
def on_open(ws):
"""连接建立后执行挂机循环任务"""
print("云手机控制通道连接成功,启动挂机脚本")
# 循环模拟游戏自动任务
while True:
# 指令1:点击坐标(300, 800),领取奖励
click_cmd = json.dumps({
"deviceId": DEVICE_ID,
"operateType": "click",
"x": 300,
"y": 800
})
ws.send(click_cmd)
time.sleep(3)
# 指令2:滑动操作,左右切换页面
swipe_cmd = json.dumps({
"deviceId": DEVICE_ID,
"operateType": "swipe",
"startX": 900,
"startY": 500,
"endX": 100,
"endY": 500,
"duration": 300
})
ws.send(swipe_cmd)
time.sleep(5)
if __name__ == "__main__":
websocket.enableTrace(False)
ws_app = websocket.WebSocketApp(
f"{WS_URL}?token={WS_TOKEN}&deviceId={DEVICE_ID}",
on_open=on_open,
on_message=on_message,
on_error=on_error,
on_close=on_close
)
# 持续保活连接
ws_app.run_forever()
四、代码使用说明
- 密钥替换:将代码中
ACCESS_KEY、SECRET_KEY、WS_TOKEN替换为云手机平台后台申请的凭证; - 设备 ID:从
get_all_devices接口返回列表中获取真实设备序列号; - 脚本拆分场景:
- API 类:用于批量初始化设备、批量装包、定时巡检在线状态;
- WebSocket 脚本:单设备实时挂机、循环自动任务;
- 拓展方向:可结合 uiautomator2、Airtest 实现图像识别自动寻路、任务判断。
五、云手机选型核心评判标准
开发与使用过程中,对比多款云手机产品,筛选优质平台重点看 5 项指标:
- API 完善度:是否开放批量创建、批量克隆、远程 ADB 调试接口;
- 运行稳定性:7×24 小时挂机是否闪退、断流、强制重启;
- 硬件配置:GPU 渲染能力、帧率上限、内存分配;
- 隔离安全:独立 IP、指纹隔离,降低账号封禁风险;
- 多端适配:电脑、安卓、iOS、网页端能否无缝互通。
六、推荐:傲晨云手机(适配自动化开发 + 手游挂机)
综合 API 支持、稳定性、性价比、多账号运营需求,傲晨云手机是兼顾开发者自动化脚本与普通玩家挂机的优选方案,下面整理其核心优势与功能:
6.1 核心产品优势
- 多年稳定老牌厂商,底层虚拟化深度优化,2K 60Hz 稳定满帧运行,长时间挂机无卡顿、闪退、断流问题;
- 独立 IP + 设备指纹隔离技术,多账号批量运营大幅降低封号概率,适配手游多开、APP 测试场景;
- 不占用本地手机电量、存储空间与流量,本地关机断网云端持续运行,完美适配 7×24 小时离线挂机;
- 多端互通,安卓、苹果、电脑、网页端四端无缝切换,一套账号随时随地操控云手机实例;
- 高性价比福利,每日签到可领取免费时长与代金券,新用户赠送免费试用时长,批量多开套餐成本更低。
6.2 开发者 & 玩家核心功能
- 完整开放 API 接口,支持上文 Python 脚本对接,批量创建、克隆、监控设备,适配自动化测试、RPA 批量运营开发;
- 全安卓版本镜像可选:安卓 8/10/12,兼容怀旧手游、新游、海外应用,自带谷歌套件一键安装;
- 内置傲晨云管家工具:智能 Root 管理、进程守护、定时重启、隐私进程隐匿,保障脚本长时间稳定运行;
- 批量同步操控,一台设备操作同步至全部云手机,批量养号、批量做任务效率大幅提升;
- 平板模式、多点触控优化,适配 MMO、回合制、射击类各类手游操作;
- 云端数据加密存储,应用数据独立隔离,清理、重置一键完成,隐私安全有保障。
6.3 适用场景总结
- 开发者:APP 兼容性批量测试、Python/ADB 自动化脚本部署、移动端 RPA 集群;
- 手游用户:多账号离线挂机、副本刷资源、长期养号、新游开荒;
- 运营从业者:短视频、社群、电商多账号矩阵统一管理。
七、总结
云手机结合 Python API+WebSocket 能够实现高度自动化的云端安卓集群,大幅降低本地硬件压力与人工操作成本。在实际落地时,平台稳定性、API 开放程度、账号安全隔离是重中之重。傲晨云手机兼顾开发侧接口能力与普通用户挂机体验,配置、稳定性、多开能力均处于第一梯队,无论是写自动化脚本还是日常手游离线托管,都是实用性极强的选择。
附录 FAQ
- 代码运行报错接口鉴权失败? 检查 AccessKey、SecretKey 是否复制正确,确认平台后台已开启 API 访问权限。
- WebSocket 连接频繁断开? 降低循环指令执行频率,增加 sleep 间隔,同时确认云手机实例未进入休眠。
- 自动化脚本能否批量控制 20 台以上设备? 傲晨云手机支持批量多开,搭配文中 API 循环遍历设备 ID,可实现几十台设备统一调度。