| name | autojs6-Doc-skills |
| description | 编写 AutoJs6 自动化脚本的专业助手。在用户编写、调试 AutoJs6 脚本时使用此技能,包括:UI控件查找与操作、触摸/手势模拟、图像识别与截图、文件/HTTP/存储操作、多线程、事件监听、悬浮窗、对话框等。当用户提及 AutoJs6、autojs、auto.js 脚本编写、安卓自动化脚本、手机脚本自动点击等相关内容时,必须使用此技能以减少代码错误、提供准确API用法。 |
AutoJs6 脚本编写技能
概述
AutoJs6 是基于 Android 无障碍服务的 JavaScript 自动化工具,使用 Mozilla Rhino 引擎(非 V8/Node.js),可直接调用 Java API。
触发条件
以下情况必须使用此技能:
- 用户请求编写 AutoJs6 脚本("帮我写一个 AutoJs6 脚本来...")
- 用户询问 AutoJs6 API 用法("AutoJs6 中如何...")
- 用户需要开发指导或遇到错误
- 用户提到相关关键词:AutoJs6、autojs、auto.js、安卓自动化、控件操作、手机脚本自动点击等
工作流程
- 识别需求:判断用户需要脚本编写、API 查询还是错误排查
- 选择参考文件:根据问题类型读取对应的参考文件(见下方说明)
- 提供准确回答:从参考文件提取信息,提供正确的函数签名、参数、代码示例
- 验证准确性:确保与参考文档一致,包含必要的错误处理
参考文件说明(按需读取)
整合参考文件(快速概览)
本技能包含三个整合参考文件,适合快速确认 API 用法:
| 文件 | 内容 | 何时读取 |
|---|
references/api-core.json | 21个核心模块的所有方法签名与说明 | 需要确认任意 API 的用法、参数、返回值时 |
references/api-selector.json | UiSelector(222方法) / UiObject(135方法) / UiObjectCollection(56方法) 完整API | 涉及控件选择、控件属性操作时 |
references/patterns-and-pitfalls.json | 权限说明、常用代码模式、Top错误列表、调试技巧、Rhino引擎特性 | 编写整体逻辑、权限判断、排查错误时 |
粒度参考文件(精确查询)
每个模块有独立的 JSON 文件,适合精确查找特定模块的详细 API:
| 功能领域 | 参考文件 |
|---|
| 自动化操作 | automator.json, coordinates-based-automation.json, widgets-based-automation.json |
| 控件选择器 | uiSelectorType.json, uiObjectType.json, uiObjectActionsType.json, uiObjectCollectionType.json |
| 应用和设备 | app.json, appType.json, device.json, intent.json, intentType.json |
| UI 交互 | ui.json, dialogs.json, floaty.json, canvas.json, progress.json, toast.json |
| 图像和 OCR | image.json, imageWrapperType.json, ocr.json, color.json, colorTable.json |
| 文件和数据 | files.json, storages.json, storageType.json |
| 网络和通信 | http.json, web.json, webSocketType.json |
| 多线程和事件 | threads.json, timers.json, events.json, eventEmitterType.json |
| 系统功能 | shell.json, sensors.json, runtime.json, engines.json |
| 工具类 | console.json, crypto.json, util.json, mathx.json, arrayx.json, numberx.json |
| 多媒体 | media.json, recorder.json, barcode.json, qrcode.json |
| 其他 | shizuku.json, plugins.json, , |
完整索引见 references/index.md
规则:回答 AutoJs6 代码问题时,先读取对应参考文件,再输出代码,不得依赖记忆中的 API 写法。简单查询用整合文件,深入查询用粒度文件。
核心模块速览
references/api-core.json 包含以下模块的完整方法列表:
| 模块 | 主要功能 | 关键方法示例 |
|---|
automator | 触摸/手势模拟 | click(x,y) swipe() gesture() input() |
widgetsBasedAutomation | 控件自动化全局函数 | click(text) scrollUp() setText() auto() |
app | 应用管理、Intent | launch() launchApp() startActivity() openUrl() |
console | 日志、控制台悬浮窗 | log() show() rawInput() time() |
device | 设备信息与控制 | width height getBattery() keepScreenOn() |
image | 截图、找色、模板匹配 | captureScreen() findColor() findImage() matchTemplate() |
http | HTTP 请求 | get() post() postJson() request() |
files | 文件读写 | read() write() exists() listDir() |
storages | 键值持久化存储 | create() .get() .put() .remove() |
threads | 多线程 | start() lock() atomic() disposable() |
events | 事件监听 | onKeyDown() |
references/api-selector.json 包含:
- UiSelector(222个方法):
text() id() className() findOne() find() exists() waitFor() 等所有选择器
- UiObject(135个方法):控件属性读取、点击、输入、滚动、节点遍历等
- UiObjectCollection(56个方法):控件集合操作
权限速查
| 功能 | 所需权限 |
|---|
| selector 查找控件 / 模拟触摸 / 系统按键 | 无障碍服务 |
images.captureScreen() | 截图权限(首次弹授权框) |
floaty.window() / console.show() | 悬浮窗权限 |
shell(cmd, true) / events.onTouch() | Root 权限 |
device.setBrightness() | 修改系统设置权限 |
通知监听 events.onNotification() | 通知服务权限 |
最常用代码模板
auto.waitFor();
let btn = text('确定').findOne(5000);
if (btn) btn.click();
else console.log('未找到按钮');
let img = images.captureScreen();
let pt = images.findColor(img, '#FF0000', {threshold: 10});
if (pt) click(pt.x, pt.y);
img.recycle();
let W = device.width, H = device.height;
swipe(W*0.5, H*0.8, W*0.5, H*0.2, 500);
let s = storages.create('myApp');
s.put('count', s.get('count', 0) + 1);
threads.start(function() {
result = ();
ui.( textView.(result));
});
;
ui.();
Top 常见错误速查
| 症状 | 原因 | 修复 |
|---|
| 控件操作全部无效 | 未开启无障碍服务 | 开头加 auto.waitFor() |
| 脚本永久卡死 | findOne() 无超时 | 改为 findOne(5000) 并判断 null |
| 长时间运行后崩溃 | Image 对象未回收 | 每次截图后 img.recycle() |
| ui 模块方法报错 | 忘写 'ui'; | 第一行加 'ui'; |
| 点击位置错误 | 固定坐标不适配 | 用 device.width/height 计算比例 |
| 子线程操作 View 报错 | 跨线程操作 UI | 改用 ui.run(() => {...}) |
| 悬浮窗脚本退出后残留 | 未关闭悬浮窗 | 退出前 floaty.closeAll() |
| dialogs 在 ui 模式卡死 | 阻塞了 UI 线程 | 用回调或 Promise 形式 |
| events 事件处理延迟 | 主线程有耗时操作 | 把耗时操作移到子线程 |
| captureScreen 每次弹框 | 未提前申请截图权限 | 脚本开头调用 images.requestScreenCapture() |
完整错误列表见 references/patterns-and-pitfalls.json → top_mistakes
回答规范
代码质量要求
- 必须
findOne() 加超时参数并处理 null
- 必须 截图操作后调用
img.recycle()
- 必须 无障碍脚本开头加
auto.waitFor()
- 必须 UI脚本第一行写
'ui';
- 推荐 使用比例坐标而非固定坐标
- 推荐 随机延迟模拟人工操作:
sleep(random(500, 1500))
回答格式
- 简述实现思路(1-2句)
- 提供完整可运行代码(含必要注释)
- 说明所需权限
- 关键注意点(不超过3条)
Rhino 引擎说明
AutoJs6 使用 Mozilla Rhino(非 V8),注意:
- 支持:
let/const / 箭头函数 / 模板字符串 / 解构 / Promise(基础)
- 不支持:顶层
await / WeakRef / 部分 ES2020+ 特性
- 特有:可直接使用 Java 类
new java.util.ArrayList()
- 可
importClass(java.io.File) 导入 Java 类
详见 references/patterns-and-pitfalls.json → rhino_engine_notes
注意事项
- 版本一致性:参考文件基于 AutoJs6 文档 v1.1.8,API 可能随版本更新变化
- 设备差异:不同 Android 设备/版本可能有行为差异,建议添加设备检测逻辑
- 错误处理:始终提供包含错误处理的代码示例,避免空指针、超时等问题
Relative paths (e.g., references/) are relative to this skill's directory (${CLAUDE_PLUGIN_ROOT}/skills/autojs6-doc/).