| 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. 读取源文件
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:
{
"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":
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 合法性校验
写完之后必须执行以下命令验证:
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 可以对比)。