能力速查
一页看全 Gomaton SDK 能做什么。每个包都是一个 import "gomaton.dev/sdk/<包>",点标题进对应 API 参考。
按包速查
| 包 | 一句话 | 典型用途 |
|---|---|---|
| motion | 触控与按键 | 点击、滑动、长按、多指、Home/Back/回车 |
| images | 截图 / 找色 / 找图 | 找到屏幕上的图标或颜色再点它、取像素 |
| uiacc | 控件树(UI 树) | 按文字 / id / 类名找控件,点它、输入、滚动 |
| device | 设备信息与状态 | 屏幕尺寸、亮度、音量、系统版本、重启震动 |
| app | 应用控制 | 按包名打开 / 停止 / 清数据 / 装卸、查前台包名 |
| ime | 剪贴板与输入法 | 读写剪贴板、往输入框提交文本(破联想搜索框) |
| ocr | 端上文字识别 | 屏幕截图里认字、按文字定位(不联网) |
| yolo | 目标检测 | 自训模型认屏幕上的目标框(不联网) |
| files | 设备侧文件 | 读写 / 追加 / 列目录,取 resources 里的素材 |
| storages | 本地 KV 存储 | 脚本重启后仍在的键值对(进度、账号态) |
| https | 网络请求 | GET / POST / 下载文件 |
| media | 媒体库 | 触发相册扫描,让新图立刻可见 |
| system | 进程与 shell | 跑 shell、看 CPU / 内存 / 进程 |
| utils | 纯 Go 小工具 | 等待、随机延时、日志、类型转换 |
按场景选能力
"我要点屏幕上一个东西" —— 三条定位路线,任选或组合:
- 知道它的文字 / id / 类名 → uiacc 控件树最稳,跨机型不受分辨率影响。
if o := uiacc.New().Text("发布").WaitFor(3000); o != nil { o.Click() } - 它是个图标 / 有固定外观 → images 找图。模板图放
resources/,用 files.Path 取路径:tpl, _ := os.ReadFile(files.Path("send.png")) // 标准库 + SDK 自由混写 if m := images.FindImage(tpl, 0.9); m.Found { motion.Tap(m.X, m.Y) } - 它是屏幕上的一段文字,但没有控件 → ocr 认字定位。
- 它是自训模型能认的目标 → yolo。
"我要往输入框打字" —— 用 ime 而不是逐字符敲键:ime.InputText("你好") 直接提交,能过联想 / 搜索框;或走剪贴板 ime.SetClipText + 粘贴。
"我要打开某个 App" —— app.Launch("包名"),不靠视觉,秒开。查当前前台用 app.CurrentPackage()。
"我要脚本记住上次跑到哪" —— storages 存进度 / 账号态,落在设备上,重启仍在。
"我要控制节奏、别太像机器" —— utils 的随机延时 + motion 的拟人滑动曲线(内置,无需自己造)。
定位三选一怎么挑
| 路线 | 稳 | 跨机型 | 前置 | 何时用 |
|---|---|---|---|---|
| 控件树 uiacc | 最稳 | 好 | 无(UiAutomation,不用开无障碍) | 首选。控件有文字 / id 就用它 |
| 找图 images | 中 | 受分辨率影响 | 要准备模板图 | 无控件、纯画布(游戏 / 自绘 UI) |
| OCR ocr | 中 | 好 | 首次 Load 模型 | 有文字但没控件(图片里的字) |
经验:能用控件树就用控件树,找图 / OCR 作补充,三者可混用(先控件树等页面,再找图点具体图标)。
用自己的模型(OCR / YOLO)
OCR 和 YOLO 都是端上 ncnn 推理,可以换成你自己的模型:
放哪:项目
resources/models/ocr/(det/rec 的.param+.bin)、resources/models/yolo/(你的.param+.bin,可选labels.txt每行一个类名)。构建部署时整个resources/会推到设备。怎么用:代码里用 files.Path 取设备上的路径:
// YOLO:自带 bin 模型 + 类别文件;labels 传空则用内置 COCO80 y, err := yolo.New( files.Path("models/yolo/best.param"), files.Path("models/yolo/best.bin"), files.Path("models/yolo/labels.txt"), 640, 0.25, 0.45) // targetSize / conf / nms,按你的模型给 if err != nil { /* 加载失败,err 带原因 */ } defer y.Close() for _, d := range y.Detect(0, 0, -1, -1) { // d.Label / d.Score / d.CenterX / d.CenterY } // OCR:换模型目录即可 ocr.Load(files.Path("models/ocr"))格式:必须是 ncnn 的
.param+.bin(与 libyolo/libppocr 的后端一致);从 YOLO 的.pt/ONNX 转 ncnn 自行完成后放进目录即可。