VSCode + Auto.js 环境搭建成功需满足三要素:手机连接成功、实时查看日志、F5直接运行脚本;核心是正确安装Autox.js-VSCodeExt插件、开启无障碍服务、确保手机与电脑同局域网并配置scriptRoot路径。

能连上手机、能实时看到日志、能按F5直接运行脚本——这三件事做成了,VSCode + Auto.js 环境就算搭好了。其他花哨功能都是锦上添花,但连不上,一切归零。
VSCode插件选哪个?别装错也别装多
现在主流且维护活跃的是 Auto.js-Autox.js-VSCodeExt(注意名字里带 Autox.js),不是旧版的 Auto.js-VSCodeExt,也不是 Pro 专用的 Auto.js-Pro-Ext。后者只适配 Auto.js Pro 9.3+,如果你用的是免费版 AutoX.js 或 4.1.x,装了也白装,命令面板里搜不到 Auto.js: Start Server 就是它没生效。
安装后务必重启 VSCode;如果之前装过其他 Auto.js 插件,建议禁用或卸载,避免端口(默认 9317)被占用或命令冲突。
- 检查是否装对:按
Ctrl+Shift+P,输入Auto.js,能看到Auto.js: Start Server和Auto.js: Show QR code这两个命令 - 插件配置路径在
.vscode/settings.json,关键项至少包含:"auto-js.connectionMode": "wireless"、"auto-js.scriptRoot": "${workspaceFolder}/scripts" - 不推荐同时启用多个 Auto.js 类插件——它们监听的都是同一个端口,容易互相踢掉连接
手机端必须开哪些权限?无障碍是硬门槛
AutoX.js 脚本跑不起来,90% 是因为无障碍服务没开。这不是可选项,是运行时强制依赖。开了无障碍,脚本才能模拟点击、读取控件、获取坐标;不开,click()、text("登录").click() 全部静默失败,控制台还不报错,只卡住。
除无障碍外,以下权限在不同机型上影响实际调试体验:
-
悬浮窗权限:用于显示调试悬浮球(比如坐标拾取工具),小米/华为等厂商需手动开启“允许显示在其他应用上方” -
自启动权限:防止脚本后台被杀,尤其在 vivo、OPPO 上影响明显 -
后台弹出界面:部分 Android 12+ 设备要求,否则 toast 提示不显示 - USB 调试(仅 ADB 连接时需要):真机有线调试必开,无线连接不用开
验证无障碍是否生效:在手机上打开 AutoX.js,点右上角「…」→「设置」→「无障碍服务」,确认开关已打开,且状态为「已启用」。
无线连接连不上?先盯住这三件事
手机和电脑不在同一局域网,是无线连接失败的第一原因。别信“都连着 Wi-Fi 就行”——有些企业网络、校园网、双频路由器会把 2.4G 和 5G 频段隔离,或者启用了 AP 隔离模式,导致设备间无法通信。
实操排查顺序:
- 在 VSCode 中执行
Auto.js: Start Server,看右下角是否显示Auto.js server running on http://192.168.x.x:9317—— 如果没显示,说明服务根本没起来,检查插件是否启用、端口是否被占用(比如另一个 VSCode 窗口已占着9317) - 手机端打开 AutoX.js → 侧边菜单 → 「连接电脑」→ 手动输入上面那个
192.168.x.x地址,端口保持9317不变;不要输localhost或127.0.0.1 - 仍失败?点 VSCode 命令面板执行
Auto.js: Show QR code,用手机 AutoX.js 扫码——扫码本质是自动填地址+端口,绕过手输错误
防火墙常被忽略:Windows 自带防火墙默认会拦截入站连接。临时关闭防火墙测试,或手动放行 9317 端口(入站规则)。
脚本一运行就报错 or 没反应?检查 scriptRoot 和文件后缀
VSCode 插件默认只识别 .js 文件,且只从 scriptRoot 指定目录下加载。如果你把脚本放在项目根目录,而 settings.json 里写的是 "auto-js.scriptRoot": "${workspaceFolder}/scripts",那按 F5 是不会触发任何动作的——插件根本找不到你要运行的文件。
常见症状包括:console.show() 不弹窗、toast("test") 不显示、控制台空空如也。
- 确保脚本文件名以
.js结尾(不能是.txt或无后缀) - 确认当前打开的文件位于
scriptRoot目录内,比如你设了/scripts,那就得把文件放在./scripts/demo.js - 首次运行前建议加一行
console.show(),再加toast("ready"),这样能快速判断是环境问题还是脚本逻辑问题 - 如果脚本里用了
engines.execScriptFile()动态加载其他文件,那些路径也必须相对于scriptRoot,不是相对于当前文件
最易被忽略的一点:脚本开头没写 "use strict"; 或 auto.waitFor();,在无障碍刚启用时就调用 click(),会导致操作全部丢弃——必须等无障碍就绪后再执行后续逻辑。











