
1. AutoX.js 开发环境搭建VS Code scrcpy adb 调试实战与 TaoToken 配置AutoX.js 是一套基于无障碍服务实现自动化操作的 JavaScript 运行环境简单说就是让手机自己点屏幕、滑页面、读控件。它适合做重复性任务脚本比如自动签到、批量点击、定时操作也适合想用 JS 写安卓自动化但不想碰 Java 的人。我这次要搭的是一套完整工作流VS Code 写代码scrcpy 把手机画面投到电脑adb 负责连接和调试最后把 AI 辅助编码工具的 Base URL 改到 TaoToken让补全和对话走统一 Key。整套流程在 Windows 上跑通Mac 和 Linux 只需把路径换成对应写法。先说清楚为什么要这么搭。AutoX.js 自带的编辑器功能比较基础写复杂脚本时没有语法提示、没有跳转、没有多文件管理效率很低。VS Code 加上 Auto.js-Autox.js-VSCodeExt 插件后可以在电脑上写代码通过 adb 把脚本推到手机运行日志还能回传到电脑终端。scrcpy 的作用是实时看到手机画面找控件、验证点击位置时不用来回低头看手机。adb 则是底层连接通道插件和 scrcpy 都依赖它。环境准备清单一台安卓手机开启开发者模式和 USB 调试、一根数据线、电脑装好 VS Code、下载 scrcpy、下载 AutoX.js 的 APK、装好 adb 工具。adb 可以单独下载 platform-tools也可以随 scrcpy 一起带。我建议单独放一个目录后面配环境变量方便。手机端设置是第一步。进入设置找到「关于手机」连续点击版本号七次开启开发者模式。然后回到设置里的「开发者选项」打开「USB 调试」。部分机型还需要打开「USB 安装」和「USB 调试安全设置」后者用于模拟点击。连接数据线后手机弹出「允许 USB 调试吗」勾选始终允许并确定。如果没弹窗换一根支持数据传输的线很多充电线只能供电不能传数据这个坑我踩过。电脑端验证连接打开终端输入adb devices正常会列出设备序列号和 device 状态。如果显示 unauthorized说明手机上没点允许如果列表为空检查线材和驱动。Windows 上有时需要装厂商 USB 驱动设备管理器里看到黄色感叹号就是驱动问题。接下来装 scrcpy。下载后解压到任意目录把该目录加入系统 PATH或者直接在解压目录里开终端。启动命令很简单scrcpy --max-size 1024 --max-fps 30--max-size限制投屏分辨率降低延迟--max-fps限制帧率。如果电脑性能一般加上--bit-rate 2M控制码率。启动后手机画面出现在窗口里可以用鼠标直接操作手机。找控件时配合 AutoX.js 的悬浮窗点一下就能看到控件树。AutoX.js 的 APK 从社区仓库下载安装到手机。打开后需要开启无障碍服务在系统设置里找到「已安装的服务」或「无障碍」把 AutoX.js 打开。然后回到 AutoX.js 主界面打开「悬浮窗」权限这样脚本运行时能看到控制按钮。AutoX.js 里还有一个「连接电脑」的开关打开后它会监听端口等待 adb 连接。VS Code 插件安装在扩展市场搜索 Auto.js-Autox.js-VSCodeExt安装后按CtrlShiftP调出命令面板输入 autox 能看到几个命令。常用的是「开启服务」它会在本地起一个端口然后通过 adb 把手机和电脑连起来。插件还提供「运行脚本」「停止脚本」「保存并运行」等命令。这里有个关键点插件连接手机依赖 adb 转发。如果adb devices正常但插件连不上手动执行一次端口转发adb forward tcp:9317 tcp:93179317 是插件默认端口具体以插件输出为准。转发后插件就能和手机上的 AutoX.js 通信。项目结构建议这样组织autox-project/ ├── main.js ├── modules/ │ └── utils.js ├── config.json └── .vscode/ └── settings.jsonmain.js是入口modules放公共函数config.json存配置。VS Code 的settings.json里可以配 AutoX.js 插件的默认设备序列号多设备时不用每次选。现在说 TaoToken 的接入。TaoToken 是一个统一的大模型 API 入口把不同模型的调用收敛到一个 Base URL 和一把 Key 上。对于写 AutoX.js 脚本来说AI 辅助能帮你补全控件查找逻辑、生成点击流程、解释报错。我用的 AI 编码工具支持自定义 Base URL把它改到 TaoToken 就能统一走 Key。配置片段以 JSON 形式给出路径按工具实际位置放{ baseUrl: https://taotoken.net/api, apiKey: 你的TaoToken Key, model: claude-sonnet-4-20250514 }如果你用的是 Cline 或类似插件配置写在插件的 settings 里字段名可能是apiProvider、baseUrl、apiKey、modelId。Codex 的auth.json写法{ base_url: https://taotoken.net/api, api_key: 你的TaoToken Key, model: claude-sonnet-4-20250514 }三件套必须齐全Base URL、Key、Model ID。少一个都会报 401 或 model not found。Key 在 TaoToken 控制台的 API Keys 页面生成模型 ID 在文档里查。配置完成后在 AI 工具里发一条测试请求让它解释一段 AutoX.js 代码。如果返回正常说明接入成功。这一步验证的是网络和鉴权和手机调试无关但能保证后面写脚本时补全可用。2. VS Code 插件与 adb 环境变量配置AutoX.js 脚本开发环境搭建这一节把 VS Code 插件和 adb 环境变量配到位让后续调试不用每次敲全路径。adb 环境变量是很多新手卡住的地方配好后adb命令在任何终端都能用。先确认 adb 位置。如果你单独下载 platform-tools解压后目录里有adb.exeWindows或adbMac/Linux。把这个目录路径复制下来。Windows 上右键「此电脑」→ 属性 → 高级系统设置 → 环境变量在「系统变量」里找到 Path编辑新建一行粘贴 adb 目录保存。Mac/Linux 编辑~/.zshrc或~/.bashrc加一行export PATH$PATH:/path/to/platform-tools然后source ~/.zshrc生效。验证新开终端输入adb version能输出版本号就成功。如果提示 command not found检查路径拼写和是否新开了终端。VS Code 插件配置。安装 Auto.js-Autox.js-VSCodeExt 后打开设置搜索 autox能看到几个选项。建议把「AutoXjs: Default Device」设成你的设备序列号多设备时省事。序列号用adb devices查。插件的工作流程是这样的按CtrlShiftP输入autox选「开启服务」插件在本地起服务并尝试 adb 连接。连接成功后VS Code 底部状态栏会显示设备信息。然后打开你的main.js按CtrlShiftP选「运行脚本」脚本会被推到手机执行。日志会回传到 VS Code 的输出面板选 AutoX.js 通道查看。如果插件连不上按顺序排查adb devices是否正常、手机 AutoX.js 的「连接电脑」是否打开、端口转发是否执行。插件默认端口在输出里能看到通常是 9317。手动转发adb forward tcp:9317 tcp:9317 adb reverse tcp:9317 tcp:9317forward是电脑访问手机reverse是手机访问电脑两个都加上更稳。AutoX.js 项目模板。新建main.js写一个最小可运行脚本ui; toast(脚本启动); console.show(); // 等待无障碍服务 auto.waitFor(); // 打开设置页 app.launchSettings(); sleep(2000); // 查找并点击 var btn text(关于手机).findOnce(); if (btn) { btn.click(); toast(点击成功); } else { toast(未找到控件); }ui表示启用 UI 模式auto.waitFor()等待无障碍就绪app.launchSettings()打开系统设置。findOnce()返回单个控件找不到返回 null。这段脚本在真机上跑能看到设置页被打开并点击「关于手机」。config.json可以放一些常量{ packageName: com.android.settings, timeout: 5000, retry: 3 }在脚本里用require读取var config require(./config.json); console.log(config.packageName);VS Code 的settings.json里加上文件关联让.js在 AutoX.js 项目里走正确的语法{ files.associations: { *.js: javascript }, autoxjs.defaultDevice: 你的设备序列号 }这样写代码时有语法高亮和补全。AutoX.js 的 API 和 Node.js 不完全一样补全可能不全但基本语法够用。adb 常用命令整理成表调试时随手查命令作用adb devices列出连接设备adb shell进入手机 shelladb install app.apk安装 APKadb push local remote推文件到手机adb pull remote local从手机拉文件adb logcat查看日志adb forward tcp:9317 tcp:9317端口转发adb logcat配合 grep 过滤 AutoX.js 日志adb logcat | grep -i autoxWindows 上用findstradb logcat | findstr /i autox这些命令在调试脚本时非常有用尤其是脚本崩溃时看堆栈。环境变量配好后scrcpy 也能直接用。启动参数再补充几个实用的scrcpy --max-size 1024 --max-fps 30 --turn-screen-off --stay-awake--turn-screen-off投屏时关掉手机屏幕省电--stay-awake保持唤醒。如果只想看不想操作加--no-control。这些参数组合起来长时间调试时手机不会锁屏。3. AutoX.js 项目结构与可复制配置scrcpy 启动参数与 TaoToken 接入这一节给出完整的项目结构模板和可复制的配置片段包括 scrcpy 启动参数、VS Code 设置、TaoToken 的 JSON/TOML 配置。照着填就能跑。项目目录建议autox-demo/ ├── .vscode/ │ └── settings.json ├── modules/ │ ├── ui.js │ └── logger.js ├── config.json ├── main.js └── README.md.vscode/settings.json{ autoxjs.defaultDevice: 你的设备序列号, autoxjs.port: 9317, files.associations: { *.js: javascript }, editor.tabSize: 4, editor.formatOnSave: true }config.json{ packageName: com.tencent.mm, timeout: 8000, retry: 3, screenshotDir: /sdcard/autox/ }modules/logger.jsfunction log(msg) { console.log([LOG] new Date().toLocaleString() msg); } function toastLog(msg) { toast(msg); log(msg); } module.exports { log: log, toastLog: toastLog };modules/ui.jsfunction clickByText(txt, timeout) { timeout timeout || 5000; var ctrl text(txt).findOne(timeout); if (ctrl) { ctrl.click(); return true; } return false; } function clickById(id, timeout) { timeout timeout || 5000; var ctrl id(id).findOne(timeout); if (ctrl) { ctrl.click(); return true; } return false; } module.exports { clickByText: clickByText, clickById: clickById };main.jsui; auto.waitFor(); var logger require(./modules/logger.js); var ui require(./modules/ui.js); var config require(./config.json); logger.toastLog(脚本启动); app.launchPackage(config.packageName); sleep(3000); if (ui.clickByText(通讯录, config.timeout)) { logger.toastLog(进入通讯录成功); } else { logger.toastLog(未找到通讯录入口); } sleep(2000); logger.toastLog(脚本结束);这个结构把公共逻辑抽到 modules配置抽到 config.json主脚本只做流程编排。改起来方便也方便 AI 辅助时按模块生成。scrcpy 启动参数按场景分# 基础投屏 scrcpy # 低延迟 scrcpy --max-size 1024 --max-fps 30 --bit-rate 2M # 省电模式 scrcpy --turn-screen-off --stay-awake # 只读模式 scrcpy --no-control # 指定设备 scrcpy -s 设备序列号多设备时-s指定序列号。--window-title可以给窗口起名方便区分。TaoToken 配置。Base URL 是https://taotoken.net/apiKey 在控制台生成。不同工具的配置格式Cline 的 settings{ apiProvider: openai, openAiBaseUrl: https://taotoken.net/api, openAiApiKey: 你的TaoToken Key, openAiModelId: claude-sonnet-4-20250514 }Codex 的auth.json{ base_url: https://taotoken.net/api, api_key: 你的TaoToken Key, model: claude-sonnet-4-20250514 }Claude Code 的 settings{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: 你的TaoToken Key, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } }三件套 Base URL、Key、Model ID 必须一致对应。Model ID 写错会报 model not foundKey 写错报 401。配置改完重启工具生效。验证配置是否生效在 AI 工具里发一条请解释这段 AutoX.js 代码的作用text(确定).findOne().click();正常返回说明接入成功。如果报错看错误信息是鉴权还是模型问题。4. 真机验证请求与成功结果自动点击脚本运行与日志回传这一节把脚本推到真机跑起来验证整套工作流。我用一段自动点击脚本在设置页里找到「关于手机」并点击然后读取版本号。脚本main.jsui; auto.waitFor(); var logger require(./modules/logger.js); logger.toastLog(开始执行); // 打开设置 app.launchSettings(); sleep(2500); // 滚动查找「关于手机」 var target text(关于手机).findOne(5000); if (target) { logger.toastLog(找到关于手机); target.click(); sleep(2000); // 读取版本号 var version textMatches(/Android 版本|版本号/).findOne(3000); if (version) { logger.toastLog(版本信息: version.text()); } else { logger.toastLog(未找到版本信息); } } else { logger.toastLog(未找到关于手机); } logger.toastLog(执行结束);运行步骤VS Code 里按CtrlShiftP输入autox选「运行脚本」。插件把脚本推到手机AutoX.js 执行。手机屏幕上能看到设置被打开自动点击「关于手机」然后 toast 显示版本信息。VS Code 输出面板选 AutoX.js 通道能看到日志[LOG] 2025-01-01 10:00:00 开始执行 [LOG] 2025-01-01 10:00:03 找到关于手机 [LOG] 2025-01-01 10:00:05 版本信息: Android 版本 13 [LOG] 2025-01-01 10:00:05 执行结束如果日志没回传检查插件服务是否开启、端口转发是否执行。手动看手机日志adb logcat | grep -i autox\|LOG成功结果手机自动完成点击流程VS Code 收到日志scrcpy 窗口里能看到操作过程。三者同步说明环境搭好了。再验证 AI 辅助。在 VS Code 里选中一段代码让 AI 解释或补全。比如选中textMatches(/Android 版本|版本号/).findOne(3000)问 AI 这行什么意思。AI 返回解释说明 TaoToken 接入正常。如果 AI 没反应检查 Base URL 和 Key。实测下来这套流程最耗时的是 adb 驱动和端口转发。驱动装好、转发执行后后面都很顺。scrcpy 的--turn-screen-off很实用长时间调试手机不发烫。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth这一节列真实报错和排查方法。这些错我在搭环境时都遇到过按顺序查基本能解决。401 Unauthorized。AI 工具报 401说明 Key 不对或没带上。检查三处Key 是否复制完整前后没空格、Base URL 是否是https://taotoken.net/api、请求头是否带了Authorization: Bearer 你的Key。Cline 里检查openAiApiKey字段Codex 检查auth.json的api_key。Key 在 TaoToken 控制台重新生成一次旧的可能失效。local proxy failed。这个错通常出现在 AI 工具走本地代理时。检查工具设置里是否开了代理开关关掉。如果系统有代理把taotoken.net加入直连列表。Base URL 直接写https://taotoken.net/api不要加额外路径。reading choices 报错。返回体里没有choices字段说明请求格式或模型不对。检查 Model ID 是否拼写正确比如claude-sonnet-4-20250514不能写成claude-sonnet-4。检查请求体是否是 OpenAI 兼容格式{ model: claude-sonnet-4-20250514, messages: [{role: user, content: hello}] }如果工具发的是 Anthropic 原生格式Base URL 要对应支持。TaoToken 的 API 文档里有格式说明。OAuth 报错。有些工具默认走 OAuth 登录不走 API Key。在设置里切换到 API Key 模式填 Base URL 和 Key。Claude Code 用ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY环境变量不要用登录命令。adb devices 显示 unauthorized。手机上没点允许。拔线重插弹窗勾选始终允许。如果弹窗不出现撤销 USB 调试授权再重连。scrcpy 启动报错 could not find adb。adb 不在 PATH 里。把 platform-tools 目录加入环境变量或把 scrcpy 和 adb 放同一目录。插件连不上手机。按顺序adb devices正常、AutoX.js 的「连接电脑」打开、端口转发执行。插件输出里看端口号手动转发。脚本运行没反应。检查无障碍服务是否开启、AutoX.js 悬浮窗权限是否给了、脚本是否有auto.waitFor()。没有auto.waitFor()时无障碍没就绪查找控件会失败。findOne 返回 null。控件没找到。用 AutoX.js 悬浮窗的「布局范围」查看控件树确认 text 或 id 写对。有些控件是动态加载的加sleep等待。链式查找时注意顺序className(android.view.ViewGroup).desc(动画).findOnce();先 className 再 desc顺序反了可能找不到。日志不回传。VS Code 输出面板选对通道插件服务开启端口转发执行。手动adb logcat看有没有输出。这些错排查完环境基本稳了。建议把常用命令写成脚本比如connect.sh#!/bin/bash adb devices adb forward tcp:9317 tcp:9317 adb reverse tcp:9317 tcp:9317 echo 连接完成每次调试前跑一下。6. 语义一致 CTATaoToken 接入与 AutoX.js 调试收尾整套流程跑通后日常开发就是VS Code 写代码AI 辅助补全插件推脚本scrcpy 看画面adb 看日志。TaoToken 在这里的角色是统一 AI 能力的入口把补全、解释、生成都收敛到一把 Key 上不用每个工具单独配。如果你要长期写 AutoX.js 脚本建议把 Coding Plan 用起来适合持续编码和 Agent 场景。配置入口在控制台Key 在 API Keys 页面生成。接入文档里有各工具的详细配置包括 Cline、Codex、Claude Code 的写法。想先验证模型效果可以用模型对话页面发几条请求确认返回正常再配到编辑器里。排障时优先看 API Keys 和接入文档大部分 401 和 model not found 都能在那找到答案。环境搭好后剩下的就是多看 AutoX.js 文档、多写脚本、多调控件。自动化这件事跑通第一个脚本后后面就是复制和改。