开发文档
从写第一个脚本到批量云控,这里有你需要的全部接口说明。
平台简介
爱玩脚本工作室是一套安卓自动化脚本的「开发 + 分发 + 调度」平台,由四个子系统组成:
产品介绍、下载中心、脚本市场、公告
应用管理、上传发布、收益结算、提现、API 密钥
用户、应用审核、卡密、订单、结算系数、站点设置
设备纳管、分组、批量下发、实时日志、数据大屏
平台只做「模拟人手操作」:点击、滑动、输入、读屏、找图、找色、识别文字,全部基于 Android 无障碍服务与截屏,免 Root、不注入。 不提供内存读写、进程注入、加速、协议重放等越过用户界面层的能力。
快速开始
安卓端 APK 装在模拟器 / 云手机 / 真机;PC 端 exe 装在电脑(通过 ADB 连设备)。见 下载中心。
首次启动按引导开启,这是点击、滑动、读屏的基础能力。
例如「打开游戏后自动完成签到、领邮件、日常任务,循环 3 次,遇到弹窗自动关闭」。
点运行看效果;用抓抓 / 控件树 / 录制器微调;满意后发布成独立 APK 或上架市场。
脚本 API
脚本语言是 JavaScript,运行在沙箱中,无需 import。脚本头部用 // @design 1080x1920 声明设计分辨率,引擎会自动换算到目标设备。
| 分类 | API | 说明 |
|---|---|---|
| 基础操作 | tap(x, y) | 点击坐标 |
| swipe(x1,y1,x2,y2,dur) | 滑动 | |
| input(text) | 输入文本 | |
| back() / home() | 返回 / 回桌面 | |
| sleep(ms) | 等待 | |
| toast(msg) / log(...) | 提示与日志 | |
| 图像识别 | find(img, opt) | 模板匹配找图,返回坐标 |
| findColor(hex, opt) | 找色 | |
| findMultiColor(first, pts, opt) | 多点找色(偏移组) | |
| findMultiColorAll / findColorAll | 找全部匹配 | |
| countColor(hex, opt) | 统计颜色数量(血条 / 进度条) | |
| cmpColor(first, pts, opt) | 多点比对(判断是否在某界面) | |
| 文本与控件 | nodes(limit) | 读取控件树 |
| findByText(t) | 按文本找控件 | |
| tapText(t) | 点击指定文本控件 | |
| text(t) | 获取控件文本 | |
| 流程控制 | waitFor(fn, timeout) | 等待条件成立 |
| retry(fn, n) | 失败重试 | |
| stop(msg) / chooseFeature(...) | 停止 / 功能选择入口 |
// @design 1080x1920
// 第一个点作为锚点,后续点用 "#颜色-偏色" 描述相对偏移
const pt = findMultiColor(
"5AC8FA-101010", // 锚点颜色(含偏色容差)
[
"12,0,FFFFFF-101010", // 相对锚点偏移 (+12, 0) 应是白色
"0,14,FF3B30-101010", // 相对锚点偏移 (0, +14) 应是红色
"24,24,34C759-101010"
],
{ region: [0, 0, 1080, 1920], threshold: 0.9 }
)
if (pt) {
toast("找到目标: " + pt.x + "," + pt.y)
tap(pt.x, pt.y)
} else {
toast("未找到目标")
}
插件开发
插件是给脚本引擎「补充自定义命令」的 JS 文件:导出一个 commands 命令集, 每个命令就是一个异步函数。脚本里不需要任何 import,直接 await 命令名(...) 调用, 第一个参数自动注入引擎对象 engine(拥有全部脚本 API)。
插件市场同时接受两种格式:PC 端的 export default {} 和安卓端的 var __plugin = {}。 用户从市场安装时云端会自动转换成目标平台的格式,开发者只需按习惯选一种写法发布即可。
从按键精灵(大漠插件)、紫猫插件、懒人精灵迁移过来?插件市场搜「迁移兼容包」一键安装: 提供 dmFindPic / dmFindColor / dmFindMultiColor / dmLeftClick / dmKeyPress / dmFindStr / dmOcr 等大漠风格命令, 以及 zmFindMultiColor / zmFindPic / zmFindColor / zmTap / zmSwipe / zmFindStr 等紫猫风格命令(偏移串格式完全一致)。 本体级兼容不可行也不合规(大漠/图灵是 Windows COM 组件、紫猫/懒人绑定各自平台的 Lua 运行时,且均为闭源收费软件), 兼容包做的是语法层映射:老代码改掉头部 import、命令名对上就能跑。 后台窗口绑定、内存读写、加速能力不做——超出平台免 Root、不注入的能力边界。
/**
* 我的第一个插件 · 保存为 my-first.plugin.js
* 放进爱玩工坊的 workspace/plugins 目录(或在工坊「插件」面板导入)
*/
export default {
name: "我的第一个插件",
version: "1.0.0",
desc: "示例:连招、找图点击、带重试的等待",
commands: {
// 脚本里:await combo(100, 200)
async combo(engine, x, y) {
await engine.tap(x, y)
await engine.sleep(120)
await engine.tap(x + 50, y)
await engine.sleep(120)
await engine.swipe(x, y, x, y - 200, 300)
},
// 脚本里:await tapUntilGone("开始战斗", 10)
async tapUntilGone(engine, text, maxTimes = 10) {
for (let i = 0; i < maxTimes; i++) {
const n = await engine.findByText(text)
if (!n) return true // 找不到了 = 已经消失
await engine.tapText(text)
await engine.sleep(1000)
}
return false
}
}
}
② 安卓端格式(等价写法)
/* 安卓端:var __plugin 代替 export default,其余完全一致。
* 手动安装时放进设备 filesDir/plugins;一般建议直接走云端安装(自动转换) */
var __plugin = {
name: "我的第一个插件",
version: "1.0.0",
desc: "示例",
commands: {
async combo(engine, x, y) {
await engine.tap(x, y)
await engine.sleep(120)
}
}
}
③ engine 对象常用能力
engine 上挂载了全部脚本 API,插件里可直接调用。常用:
| 能力 | API | 说明 |
|---|---|---|
| 操作 | tap / tapHuman / swipe / input / back / home | tapHuman 带随机偏移更像真人 |
| 识别 | find / findColor / findMultiColor / findByText / nodes | 找图、找色、找控件 |
| 流程 | sleep / waitFor / retry / stop / toast / log | log 会写入脚本运行日志面板 |
| 表单 | showForm(fields) | 插件命令也可以弹参数表单 |
| 项目 | 说明 |
|---|---|
| 文件位置 | PC:workspace/plugins/*.js;安卓:filesDir/plugins/。_ 开头的文件不加载(可当公共库) |
| 命名冲突 | 插件命令与内置 API 重名时内置优先,插件命令被跳过并在日志提示 |
| 依赖 | 单文件自包含,不支持 import/require 第三方库;公共逻辑放 _shared.js 的做法两端行为不同,不推荐 |
| 体积 | 上传插件市场单文件上限 256KB |
| 安全 | 禁止 child_process 等破坏性调用,云端上传时会校验;插件运行在脚本沙箱内 |
| 生效时机 | 安装/删除后,下一次运行脚本时生效(PC);安卓端安装新插件后重启应用生效 |
dev.html → 插件发布,填名称、版本、描述,选择 .js 文件上传。
用相同名称再次上传会覆盖更新版本;插件标识(slug)先到先得,被他人占用时需换名。
用户在爱玩工坊「插件」面板或安卓端「设置 → 插件」搜索安装,安装量实时统计。
作者可随时删除自己的插件;平台对违规插件可下架处理。
参数表单 showForm
把参数从代码里挪到界面上。运行前弹出配置界面,改参数不用碰代码。
const cfg = await showForm([
{ type: "radio", id: "mode", label: "运行模式", options: ["快速", "完整"], default: "快速" },
{ type: "checkbox", id: "tasks", label: "要做的事情", options: ["主线", "日常", "刷野"], default: ["主线"] },
{ type: "select", id: "server", label: "目标区服", options: ["一区", "二区", "三区"] },
{ type: "number", id: "times", label: "循环次数", default: 3 },
{ type: "switch", id: "autoFix", label: "异常自动重试", default: true },
{ type: "slider", id: "delay", label: "操作间隔(ms)", min: 200, max: 3000, default: 800 },
{ type: "text", id: "account", label: "账号" }
])
if (!cfg) return stop("用户取消")
if (cfg.tasks.includes("主线")) { /* ... */ }
云控接入
云控后台支持把云手机、模拟器、真机统一纳管,按分组批量下发任务,执行日志实时回传。
云控后台 → 设备管理 → 添加设备,填名称与分组。
点设备卡片上的「接入」,复制 Agent Key 或下载专属接入脚本。
在能访问 adb 的电脑执行接入脚本,或把心跳逻辑内置到设备的开机自启中。
设备显示在线后,在「批量任务」或「脚本下发」中选择目标范围,一键下发。
设备 Agent 接口
所有请求需带请求头 X-Agent-Key: <设备 Agent Key>。
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/agent/register | 上线注册,上报型号 / 系统 / 分辨率 |
| POST | /api/agent/heartbeat | 心跳,建议 3-10 秒一次,返回是否有待执行任务 |
| GET | /api/agent/poll | 拉取待执行任务 |
| POST | /api/agent/report | 上报任务结果与日志 |
| POST | /api/agent/log | 执行过程中上报实时日志 |
curl -X POST http://www.awzs.top/api/agent/register \
-H "Content-Type: application/json" \
-d '{"agent_key":"DK-XXXX","model":"Pixel 6","android_ver":"13"}'
curl "http://www.awzs.top/api/agent/poll?agent_key=DK-XXXX"
角色与权限
| 角色 | 入口 | 权限 |
|---|---|---|
| 普通用户 | /cloud.html | 浏览市场、激活卡密、管理自己的云控设备 |
| 开发者 | /dev.html | 上架应用、收益分账、提现、API 密钥、云端脚本库 |
| 管理员 | /admin.html | 全部权限,含用户、审核、卡密、结算、站点设置 |
开发者 developer / dev123456
普通用户 user1 / 123456
常见问题
不需要。全部基于无障碍服务与截屏实现。
平台支持把脚本打包成独立 APK 分发;服务端存储的脚本仅授权账号可读取。
按频道系数 × 当日 DAU:免费 0.05、平台 VIP 0.4、单脚本付费 50% 分成。系数可在网站后台实时调整并对历史未结算数据重算。
采用心跳 + 拉取模式,设备只出网入网、不要求固定 IP,可水平扩展到数百台。
平台可在网站后台统一配置 OpenAI 兼容接口;未配置时返回可用示例骨架,方便先跑通流程。