9.0 KiB
9.0 KiB
工作手机SDK v3.0 - 系统架构说明
一、整体架构图
┌──────────────────────────────────────────────────────────────────┐
│ 你的Mac电脑 │
│ │
│ ┌─────────────────────┐ ┌─────────────────────────────────┐ │
│ │ SDK服务 (Python) │ │ Android模拟器/真机 │ │
│ │ │ │ │ │
│ │ FastAPI服务器 │◄───┤ emulator-5554 │ │
│ │ 端口: 8899 │ADB │ (RedMi13模拟器) │ │
│ │ │命令│ │ │
│ │ 位置: │ │ 运行的APP: │ │
│ │ sdk/app/main.py │ │ - 豆包 │ │
│ │ │ │ - Chrome │ │
│ └─────────────────────┘ │ - 设置 │ │
│ ▲ │ │ │
│ │ HTTP API │ 位置: │ │
│ │ │ ~/.android/avd/RedMi13.avd │ │
│ ▼ └─────────────────────────────────┘ │
│ ┌─────────────────────┐ ▲ │
│ │ 存客宝后端 (PHP) │ │ │
│ │ │ │ USB/WiFi │
│ │ 调用SDK的API │ │ │
│ └─────────────────────┘ ┌──────┴──────┐ │
│ │ scrcpy窗口 │ │
│ │ (屏幕镜像) │ │
│ └─────────────┘ │
└──────────────────────────────────────────────────────────────────┘
二、各组件位置
| 组件 | 位置 | 说明 |
|---|---|---|
| SDK服务端 | /Users/karuo/Documents/开发/2、私域银行/工作手机/sdk/app/ |
Python FastAPI服务 |
| SDK配置 | /Users/karuo/Documents/开发/2、私域银行/工作手机/sdk/.env |
环境变量配置 |
| PHP客户端 | /Users/karuo/Documents/开发/2、私域银行/工作手机/sdk/php-sdk/ |
存客宝调用SDK的库 |
| 模拟器AVD | ~/.android/avd/RedMi13.avd/ |
Android虚拟设备文件 |
| ADB工具 | /usr/local/share/android-commandlinetools/ |
Android调试桥 |
三、通信流程详解
流程1:存客宝发送微信消息
存客宝后端 SDK服务 手机/模拟器
│ │ │
│ 1. HTTP POST │ │
│ /api/v3/message/send │ │
│ {device_id, platform, │ │
│ to_id, content} │ │
│─────────────────────────►│ │
│ │ │
│ │ 2. adb shell命令 │
│ │ 启动微信、搜索联系人、 │
│ │ 点击、输入、发送 │
│ │─────────────────────────────►│
│ │ │
│ │ 3. 操作完成 │
│ │◄─────────────────────────────│
│ │ │
│ 4. 返回结果 │ │
│ {success: true, │ │
│ message_id: xxx} │ │
│◄─────────────────────────│ │
流程2:截图
存客宝后端 SDK服务 手机/模拟器
│ │ │
│ POST /screenshot │ │
│─────────────────────────►│ │
│ │ adb exec-out screencap -p │
│ │─────────────────────────────►│
│ │ │
│ │ 返回PNG图片数据 │
│ │◄─────────────────────────────│
│ │ │
│ {base64: "iVBORw0..."} │ │
│◄─────────────────────────│ │
四、核心技术原理
4.1 ADB (Android Debug Bridge)
ADB是Android官方的调试工具,SDK通过它控制手机:
# 查看连接的设备
adb devices
# 截图
adb exec-out screencap -p > screen.png
# 点击屏幕坐标
adb shell input tap 540 1200
# 滑动
adb shell input swipe 540 1800 540 600 500
# 输入文字
adb shell input text "Hello"
# 启动APP
adb shell am start -n com.tencent.mm/.ui.LauncherUI
# 按键
adb shell input keyevent KEYCODE_BACK
4.2 SDK将ADB封装成HTTP API
# sdk/app/services/adb_device.py
class ADBDevice:
def click(self, x: int, y: int):
"""点击坐标"""
self._shell(f"input tap {x} {y}")
def screenshot(self):
"""截图"""
result = subprocess.run(
["adb", "-s", self.serial, "exec-out", "screencap", "-p"],
capture_output=True
)
return base64.b64encode(result.stdout)
4.3 存客宝通过PHP调用
// 存客宝后端代码
$sdk = new WorkPhoneClient('http://localhost:8899', 'api-key');
// 发送消息
$sdk->sendMessage('emulator-5554', 'wechat', '张三', '你好');
// 截图
$screenshot = $sdk->screenshot('emulator-5554');
五、实际运行的进程
# 1. SDK服务进程
ps aux | grep python
# Python 63973 ... uvicorn main:app --host 0.0.0.0 --port 8899
# 2. 模拟器进程
ps aux | grep emulator
# emulator -avd RedMi13 -no-snapshot -gpu host
# 3. ADB服务进程
ps aux | grep adb
# adb -L tcp:5037 fork-server server
# 4. scrcpy屏幕镜像
ps aux | grep scrcpy
# scrcpy -s emulator-5554 --window-title "红米13模拟器"
六、文件关系图
sdk/
├── app/ # SDK服务端
│ ├── main.py # FastAPI入口 (监听8899端口)
│ ├── config.py # 配置
│ ├── routers/
│ │ ├── adb.py # ADB设备控制API
│ │ ├── devices.py # 设备管理API
│ │ └── unified.py # 统一消息API
│ └── services/
│ └── adb_device.py # ADB命令封装
│
├── php-sdk/
│ └── WorkPhoneClient.php # 存客宝用的PHP客户端
│
└── agent/ # 手机端Agent (可选)
└── agent.py # 运行在手机上的程序
七、为什么这样设计
优点
- 无需ROOT - 使用官方ADB接口,不需要ROOT手机
- 跨平台 - 支持任何Android APP,不限于微信
- 成本低 - 不依赖第三方服务商
- 可扩展 - 可以添加AI Agent实现智能控制
与奥创的区别
| 特性 | 自研SDK | 奥创 |
|---|---|---|
| 控制方式 | ADB命令 | Hook注入 |
| 需要ROOT | 否 | 是 |
| 支持APP | 任意APP | 仅微信 |
| 月费用 | 服务器成本(~500元) | 500元/台 |
| 稳定性 | 高(官方接口) | 中(可能被检测) |