# -*- coding: utf-8 -*- """系统性核对:手表从回复里读的每个 key,服务端到底发没发。 这类"键名对不上"的 bug 不会报错,只会让功能静默失败 —— 用户看到的就是"这个功能不能用"。 """ from __future__ import annotations import re import sys from pathlib import Path ROOT = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote") SERVER = ROOT / "windows" / "lanremote" / "server.py" MAIN = ROOT / "android" / "src" / "com" / "lanremote" / "watch" / "MainActivity.java" def server_reply_keys() -> dict: """从 server.py 里抠出每个 cmd 分支返回的 key。""" text = SERVER.read_text(encoding="utf-8") out: dict = {} # 找 if cmd == P.CMD_XXX: ... 到下一个 if cmd == blocks = re.split(r"\n if cmd == P\.(\w+):", text) for i in range(1, len(blocks), 2): name = blocks[i] body = blocks[i + 1] keys = set(re.findall(r'"(\w+)":', body)) # 只保留这个分支自己的(到下一个 def 或缩进变浅为止) body = body.split("\n def ")[0] keys = set(re.findall(r'"(\w+)":', body)) out[name] = keys return out def app_reads() -> dict: """手表从回复里读了哪些 key。""" text = MAIN.read_text(encoding="utf-8") out: dict = {} # Json.list(reply, "key") / Json.str(reply, "key") / Json.bool(reply, "key") for match in re.finditer( r'Json\.(list|str|bool|integer|mapList)\(\s*(\w+)\s*,\s*"(\w+)"', text): out.setdefault(match.group(3), set()).add(match.group(2)) # stringList(reply, "key") for match in re.finditer(r'stringList\(\s*(\w+)\s*,\s*"(\w+)"', text): out.setdefault(match.group(2), set()).add(match.group(1)) return out def main() -> int: server = server_reply_keys() reads = app_reads() # 服务端发出去的所有 key all_server_keys = set() for keys in server.values(): all_server_keys |= keys print(f" 服务端 {len(server)} 个命令分支") print(f" 手表读了 {len(reads)} 个不同的 key") print() print("=" * 74) print("手表读了、但服务端**任何地方都没发过**的 key(一定是 bug)") print("=" * 74) missing = [] # 这些是本地对象或通用字段,不算 KNOWN_LOCAL = {"cmd", "ok", "error", "event", "note", "type", "seq", "last", "data", "name", "text", "title", "path", "size", "index", "count", "time", "code", "token", "serverName", "deviceId", "deviceName", "needPair", "version", "proto", "host", "port", "ips", "wifi", "files", "features", "groups", "pong", "os", "screen", "message"} for key in sorted(reads): if key in all_server_keys or key in KNOWN_LOCAL: continue missing.append(key) print(f" {key:<20} 被这些变量读: {', '.join(sorted(reads[key]))}") if not missing: print(" (没有)") print() print("=" * 74) print("每个命令实际发出的 key —— 重点看那几个已知对不上的") print("=" * 74) for cmd in ("CMD_VOICE_LIST", "CMD_AUDIO_LIST", "CMD_CLIP_HISTORY", "CMD_FILE_LIST", "CMD_PROC_LIST", "CMD_FEATURE_LIST", "CMD_INFO", "CMD_PERF", "CMD_DISK", "CMD_BATTERY"): if cmd in server: print(f" {cmd:<22} -> {sorted(server[cmd])}") return 0 if __name__ == "__main__": sys.exit(main())