1. 为什么我建议用 VS Code + 雷电模拟器跑 AutoJs 脚本
如果你刚开始接触 AutoJs 或 autox.js,大概率会遇到一个很别扭的循环:在模拟器里用手机端编辑器敲代码,改一行、切一次窗口、点一次运行,日志还得在小屏幕上翻。脚本稍微长一点,这种开发方式基本没法持续迭代。
AutoJs 本身是一个基于无障碍服务的 Android 自动化工具,能做什么?简单说就是模拟点击、滑动、读取控件、截图找图、定时执行任务。适合谁?适合想批量处理重复操作、做 App 自动化测试、或者写点小工具解放双手的开发者。而 autox.js 是社区在 AutoJs 免费版停更后接手的开源分支,目前仍在维护,兼容大部分 AutoJs 语法。
真正让开发效率起飞的组合,是VS Code 写代码 + 雷电模拟器跑脚本 + 插件负责推送和日志回传。VS Code 负责编辑体验,雷电模拟器提供稳定的 Android 运行环境,AutoJs 插件把两者连起来。这套配置搭好之后,你改完代码按一个快捷键,脚本就推到模拟器里跑起来,日志直接回到 VS Code 的输出面板。
这篇就聚焦这套开发调试环境的搭建:设备怎么连、配置怎么写、脚本怎么推、日志怎么看、报错怎么排。全程给可复制的骨架,你照着做就能跑通第一个脚本。
2. 前置准备:autox.js、雷电模拟器与 VS Code 插件
先把三样东西装齐,顺序无所谓,但版本要选对。
autox.js 的获取:AutoJs 免费版早已无法正常使用,现在建议直接用 autox.js。它的发布页在 GitHub 的 kkevsekk1/AutoX 仓库 Releases 里,下载最新的 apk 安装到雷电模拟器即可。安装方式很简单,把 apk 拖进雷电模拟器窗口就会自动安装。
雷电模拟器的设置:安装完 autox.js 后,进入模拟器的「设置」,找到 autox.js 应用,开启两个关键权限。一个是无障碍服务,这是 AutoJs 模拟点击的核心,不开的话所有点击操作都会失效;另一个是悬浮窗权限,用于显示控制台和调试信息。部分系统还需要给「后台弹出界面」权限,否则脚本在后台容易被系统掐掉。
VS Code 插件:在 VS Code 扩展市场搜索Auto.js或AutoJs,安装对应的插件(常见的是Auto.js-VSCodeExt这类)。装完后按Ctrl+Shift+P打开命令面板,输入Auto.js就能看到一系列命令,比如启动服务、连接设备、运行脚本、保存脚本到设备等。
连接电脑这一步别漏:在 autox.js 应用里找到「连接电脑」或「开发者选项」里的服务开关,把它打开。它会在模拟器里启动一个本地服务,VS Code 插件通过这个服务推送脚本。同时你需要知道模拟器所在环境的 IP,雷电模拟器一般是127.0.0.1配合一个映射端口,具体端口在 autox.js 的连接界面会显示。
注意:这里说的「连接电脑」是 autox.js 自带的局域网调试服务,不是任何网络代理工具,纯粹是本机开发调试用途。
3. 可复制配置:VS Code 连接雷电模拟器的骨架
配置的核心是让 VS Code 插件知道往哪个地址推脚本。不同插件版本配置项名称略有差异,但逻辑一致。下面给一份通用骨架,你按实际插件字段名微调。
先看设备连接确认。在 VS Code 命令面板执行插件的「启动服务」命令,然后在 autox.js 里点「连接电脑」,两边会通过 IP + 端口握手。握手成功后,VS Code 输出面板会打印设备已连接,autox.js 界面也会显示已连接状态。
如果插件支持配置文件,通常在项目根目录建一个.autojs或settings.json片段,写入类似内容:
{ "autojs.deviceAddress": "127.0.0.1", "autojs.devicePort": 9317, "autojs.scriptRoot": "./scripts", "autojs.autoSaveBeforeRun": true, "autojs.logLevel": "debug" }这里的devicePort一定要以 autox.js 连接界面实际显示的为准,不同版本默认端口可能不同。scriptRoot指向你本地存放脚本的目录,插件运行时会把这个目录下的脚本推送到模拟器的/sdcard/脚本/之类路径。
再给一个最小可运行脚本,用来验证整条链路。新建hello.js:
// hello.js - 最小验证脚本 toast("脚本已启动"); console.show(); log("当前设备分辨率: " + device.width + "x" + device.height); // 打开设置页做个无害操作 app.launchSettings(); sleep(1500); // 读取当前页面包名,确认无障碍生效 var pkg = currentPackage(); log("当前包名: " + pkg); if (pkg) { toast("无障碍服务正常"); } else { toast("无障碍可能未开启"); }这个脚本不涉及任何敏感操作,只做启动、打印、读包名,适合第一次跑通链路时用。console.show()会在模拟器上弹出悬浮控制台,方便你肉眼确认脚本真的在跑。
4. 验证请求:推送脚本、运行与日志查看
配置写好后,验证分三步走,每一步都有明确的成功标志。
第一步,推送脚本。在 VS Code 里打开hello.js,命令面板执行插件的「保存脚本到设备」或「运行脚本」命令。成功的话,VS Code 输出面板会显示类似Script saved to /sdcard/脚本/hello.js的日志。如果这一步失败,多半是设备没连上或端口填错,回到第 3 节检查握手状态。
第二步,运行并观察。执行「运行脚本」后,切到雷电模拟器,你应该能看到 autox.js 弹出 toast「脚本已启动」,紧接着出现悬浮控制台,里面打印出分辨率和包名。这一步的成功标志是:模拟器上有可见反馈,VS Code 输出面板同步出现日志。
第三步,日志回传确认。VS Code 插件的输出面板(通常在「输出」标签页选择 Auto.js 通道)会实时显示log()和console.log()的内容。如果你在脚本里加了console.show(),模拟器上的悬浮窗也会显示同样的日志。两边日志一致,说明调试链路完全打通。
到这里,你已经完成了「本地编辑 → 推送 → 运行 → 日志回传」的完整闭环。后续迭代脚本时,改完直接按运行快捷键,几秒就能看到结果,不用再碰模拟器里的编辑器。
5. 本篇常见错排查:连接失败、无障碍掉线、日志不显示
跑通过程中,下面几个坑我踩过,也见过很多人卡在这里。
连接失败,插件提示找不到设备。先确认 autox.js 里的「连接电脑」开关是打开的,再确认端口和 VS Code 配置一致。雷电模拟器有时会有多个实例,端口会变,重新看一眼 autox.js 连接界面显示的端口号。另外,模拟器的网络模式如果被改成桥接,127.0.0.1可能不通,换回默认的 NAT 模式通常就好。
无障碍服务频繁被停止,脚本跑一半不动了。这是 autox.js 在模拟器上最常见的问题。解决办法是给 autox.js 开启「后台弹出界面」权限,并在模拟器的电池优化里把 autox.js 设为不限制。如果还是掉,可以在脚本开头加一段检测,发现无障碍断了就提示:
// 检测无障碍是否可用 if (!auto.service) { toast("无障碍服务未开启,请手动开启"); // 尝试跳转到无障碍设置页 app.startActivity({ action: "android.settings.ACCESSIBILITY_SETTINGS" }); }日志不显示或延迟很大。先确认 VS Code 输出面板选对了通道,有些插件把日志放在独立的「Auto.js」输出通道里,不是默认的「任务」通道。如果日志延迟,检查是不是脚本里有大量sleep或死循环阻塞了主线程,日志回传依赖主线程空闲。把耗时操作放进子线程能缓解。
脚本推送成功但运行报错找不到文件。这通常是路径问题。插件推送的脚本路径和脚本里引用的资源路径(比如图片)可能不在同一目录。建议统一用绝对路径,或者把资源文件和脚本放同一目录一起推送。截图找图类脚本尤其要注意,模拟器截图的分辨率和本地图片分辨率不一致会导致找图失败,尽量用模拟器内截图作为模板图。
launchApp 失效。如果模拟器里存在同名应用,launchApp("应用名")可能启动错对象。改用包名启动更稳:
// 用包名启动,避免同名歧义 app.launchPackage("com.example.target");6. 后续迭代:把调试环境用起来
环境搭好只是起点,真正提升效率的是把调试习惯固定下来。我的做法是每个脚本项目单独一个目录,里面放main.js入口和若干模块文件,VS Code 里配置好运行快捷键,改完即跑。日志里关键节点都打上log(),出问题时按时间线回溯,比在模拟器里瞎点快得多。
如果你后续要写更复杂的自动化流程,比如多步骤任务编排、定时触发、或者接入模型能力做决策,可以考虑把脚本逻辑和外部服务分开。TaoToken 这边提供了模型对话和 API 接入能力,适合在脚本里做文本判断、内容生成这类需要「动脑」的环节,脚本本身专注做「动手」的点击滑动。想试的话可以从模型对话页面先感受一下交互,再决定要不要接进自动化流程。
调试环境的价值在于让你敢改、改得快。把这篇的配置跑通,后面写多少脚本都只是在这个骨架上加肉的事。