Skip to main content

sync-methods

当 AutomatorService.java 接口有新增/删除/修改方法时,同步更新 tools/methods.json。 触发条件:用户说"同步methods"、"更新methods.json"、"sync methods"、"sync jsonrpc"、 或者你发现 AutomatorService.java 被修改后需要更新 methods.json。

来源信息

仓库
openatx/android-uiautomator-server-jar
最近来源活动
2026年6月17日 11:00
检测到的 SKILL.md 语言
中文
星标
20
分支
11

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
sync-methods
description
当 AutomatorService.java 接口有新增/删除/修改方法时,同步更新 tools/methods.json。 触发条件:用户说"同步methods"、"更新methods.json"、"sync methods"、"sync jsonrpc"、 或者你发现 AutomatorService.java 被修改后需要更新 methods.json。
# 同步 methods.json ## 目标 读取 `app/src/main/java/com/wetest/uia2/stub/AutomatorService.java`,解析出所有 JSON-RPC 方法定义, 写入 `tools/methods.json`。 **原则**:不需要写任何 Python/脚本解析器,你作为 AI 直接阅读理解 Java 源码,提取信息,手写 JSON。 --- ## 1. 读取源文件 ```bash app/src/main/java/com/wetest/uia2/stub/AutomatorService.java ``` 跳过文件开头的 license 注释和 package/import 声明,从 `public interface AutomatorService {` 开始解析。 --- ## 2. 解析规则 ### 2.1 分区识别 Java 文件中以 `/**********` 开头的大注释块是分区标记: | 注释中的关键词 | 映射 category | |---|---| | `UiDevice` | `uidevice` | | `UiObject` | `uiobject` | | `UiScrollable` | `uiscrollable` | 分区标记之后、下一个分区标记之前的所有方法,默认属于该 category。 第一个分区标记之前的方法(`ping`、`getLastToast`、`clearLastToast` 等),category 为 `core`。 最后一个分区标记之后的方法(Configurator、Clipboard、launchApp 等),按覆盖表决定 category。 ### 2.2 方法提取 对每个方法,提取以下信息: **a) description** — 从 Javadoc 注释(`/** ... */`)的第一句话提取。只取 `@param` / `@return` / `@throws` 之前的内容,合并为一行。 **b) name** — 方法名。不包含返回类型和参数。 **c) params** — 参数列表,每个参数提取 `{"name": "...", "type": "..."}`: - 跳过 `final` 修饰符 - 类型保留完整写法(如 `int[]`、`Selector[]`、`String`、`boolean`、`long`) - `@JsonRpcErrors` 等注解跳过,不影响解析 **d) 忽略**的条目: - `final static int ERROR_CODE_BASE = -32000` 等字段声明 - 被 `/** Deprecated APIs ... */` 包裹的注释中的方法签名 - 空行和纯注释行 **注意**:重载方法是独立条目,每个重载单独生成一条记录(如 `click` 有多个重载)。 ### 2.3 分类覆盖表 以下方法不跟随分区的默认 category,必须使用指定的分类: ``` # watcher 分类 hasWatcherTriggered hasAnyWatcherTriggered registerClickUiObjectWatcher registerPressKeyskWatcher removeWatcher resetWatcherTriggers runWatchers getWatchers # configurator 分类 getConfigurator setConfigurator # clipboard 分类 setClipboard getClipboard pasteClipboard clearInputText # app 分类 launchApp executeShellCommand ``` --- ## 3. 输出格式 写入 `tools/methods.json`,UTF-8 编码,2 空格缩进。完整 schema: ```json { "methods": [ { "name": "方法名", "category": "core|uidevice|uiobject|uiscrollable|watcher|configurator|clipboard|app", "description": "从Javadoc第一句话提取的描述,英文原文", "params": [ {"name": "参数名", "type": "参数类型"} ], "example": [] } ], "categories": { "core": "Core (connection, device info, toast)", "uidevice": "UiDevice (click, swipe, key, screenshot)", "uiobject": "UiObject (find, text, click, drag)", "uiscrollable": "UiScrollable (scroll, fling)", "watcher": "Watcher", "configurator": "Configurator", "clipboard": "Clipboard", "app": "App (launch, shell)" } } ``` ### example 字段生成规则 按参数类型依次生成示例值: | Java 类型 | 示例值 | |---|---| | `int` | `0` | | `long` | `5000` | | `float` | `1.0` | | `boolean` | `false` | | `String` | `""` | | `Selector` | `{"text": "Example"}` | | `Selector[]` | `[{"text": "A"}, {"text": "B"}]` | | `String[]` | `["a", "b"]` | | `int[]` | `[100, 200]` | | `Point` | `{"x": 100, "y": 200}` | | `ConfiguratorInfo` | `{"actionAcknowledgmentTimeout": 3000}` | | 其他未知类型 | `""` | --- ## 4. 写入 & 校验 ### 4.1 写入文件 ``` tools/methods.json ``` ### 4.2 JSON 合法性校验 写完之后必须执行以下命令验证: ```bash python3 -c "import json; data=json.load(open('tools/methods.json')); print(f'OK: {len(data[\"methods\"])} methods, {len(data[\"categories\"])} categories')" ``` 如果报错,根据错误信息定位并修复 JSON,重新写入后再次校验,直到输出 `OK: N methods, 8 categories`。 --- ## 5. 完成确认 校验通过后,告知用户同步结果:总共多少个方法,与上次相比有什么变化(如果有旧版本 methods.json 可以对比)。
在 GitHub 查看