# autojs6-Doc-skills

> 编写 AutoJs6 自动化脚本的专业助手。在用户编写、调试 AutoJs6 脚本时使用此技能，包括：UI控件查找与操作、触摸/手势模拟、图像识别与截图、文件/HTTP/存储操作、多线程、事件监听、悬浮窗、对话框等。当用户提及 AutoJs6、autojs、auto.js 脚本编写、安卓自动化脚本、手机脚本自动点击等相关内容时，必须使用此技能以减少代码错误、提供准确API用法。

- Skill: `kwin-wang/autojs6-doc-skills` (Agent Skill, multi-file: 123 files)
- Install (CLI): `npx skillmds@latest add kwin-wang/autojs6-doc-skills`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kwin-wang/autojs6-doc-skills/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: kwin-wang (https://skillmd.com/u/kwin-wang)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kwin-wang/autojs6-doc-skills

---


# AutoJs6 脚本编写技能

## 概述

AutoJs6 是基于 Android 无障碍服务的 JavaScript 自动化工具，使用 Mozilla **Rhino 引擎**（非 V8/Node.js），可直接调用 Java API。

- **官方文档**：https://github.com/SuperMonster003/AutoJs6-Documentation
- **文档版本**：1.1.8（versionCode 39）

---

## 触发条件

**以下情况必须使用此技能：**

1. 用户请求编写 AutoJs6 脚本（"帮我写一个 AutoJs6 脚本来..."）
2. 用户询问 AutoJs6 API 用法（"AutoJs6 中如何..."）
3. 用户需要开发指导或遇到错误
4. 用户提到相关关键词：AutoJs6、autojs、auto.js、安卓自动化、控件操作、手机脚本自动点击等

---

## 工作流程

1. **识别需求**：判断用户需要脚本编写、API 查询还是错误排查
2. **选择参考文件**：根据问题类型读取对应的参考文件（见下方说明）
3. **提供准确回答**：从参考文件提取信息，提供正确的函数签名、参数、代码示例
4. **验证准确性**：确保与参考文档一致，包含必要的错误处理

---

## 参考文件说明（按需读取）

### 整合参考文件（快速概览）

本技能包含三个**整合参考文件**，适合快速确认 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`, `notice.json`, `autojs.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()` `onTouch()` `onNotification()` `onToast()` |
| `floaty` | 悬浮窗 | `window()` `rawWindow()` `closeAll()` |
| `dialogs` | 对话框 | `alert()` `confirm()` `rawInput()` `select()` |
| `global` | 全局函数 | `sleep()` `toast()` `toastLog()` `exit()` `random()` |
| `ui` | UI 界面 | `layout()` `inflate()` `run()` `post()` |
| `shell` | Shell 命令 | `shell(cmd, root)` |
| `media` | 多媒体播放 | `playMusic()` `stopMusic()` `scanFile()` |
| `sensors` | 传感器 | `register()` `unregister()` |
| `util` | 工具函数 | 字符串/数组/对象辅助方法 |
| `crypto` | 加解密 | 哈希、AES 等加密方法 |
| `base64` | Base64 编解码 | `encode()` `decode()` |

`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()` | **通知服务权限** |

---

## 最常用代码模板

```javascript
// ① 脚本开头：请求无障碍服务
auto.waitFor();

// ② 等待控件出现后点击（推荐写法）
let btn = text('确定').findOne(5000); // 加超时，不永久阻塞
if (btn) btn.click();
else console.log('未找到按钮');

// ③ 截图找色（必须 recycle）
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);

// ⑥ 多线程更新UI
threads.start(function() {
    let result = doWork();
    ui.run(() => textView.setText(result));
});

// ⑦ UI脚本开头必须声明
'ui';
ui.layout(<vertical>...</vertical>);
```

---

## 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. 简述实现思路（1-2句）
2. 提供完整可运行代码（含必要注释）
3. 说明所需权限
4. 关键注意点（不超过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`

---

## 注意事项

1. **版本一致性**：参考文件基于 AutoJs6 文档 v1.1.8，API 可能随版本更新变化
2. **设备差异**：不同 Android 设备/版本可能有行为差异，建议添加设备检测逻辑
3. **错误处理**：始终提供包含错误处理的代码示例，避免空指针、超时等问题

Relative paths (e.g., references/) are relative to this skill's directory (${CLAUDE_PLUGIN_ROOT}/skills/autojs6-doc/).

