AutoLua VSCode 插件
Android 自动化脚本开发工具:Lua 脚本编辑、设备连接、真机调试、图色/OCR/寻路工具链,一键打包成独立 APK。
👤 作者:じ☆veつ错过的念 | 💬 QQ:956466259 | 👥 QQ群:758965836
目录
安装
1. 装插件:安装 .vsix 文件(命令面板 → 扩展: 从 VSIX 安装...)。
2. 装手机端:手机上安装 AutoLua APK 并启动。没有安装包的话,左侧 工具 → 帮助 → 调试APK下载 可以直接下载。
3. 装构建环境(只有要打包 APK 才需要):工具 → 帮助 → SDK更新,自动下载 jdk / android-sdk / gradle。已经有本地环境的话,在设置里指定 autolua.localBuildEnvPath 即可。
快速开始
① 初始化项目(F8) → ② 连接设备 → ③ 写脚本 → ④ F5 运行
① 初始化项目:按 F8,或左侧 工具 → 项目 → 初始化项目。会生成完整目录结构、main.lua、统一图色.lua、ui.json 和签名证书。
② 连接设备:左侧 设备 视图 → 扫描设备 → 点列表里的设备。详见下一节。
③ 写脚本:编辑 scripts/main.lua。打字有补全,鼠标悬停看函数说明,右侧 API 参考 可以搜函数。
④ 运行:F5。日志出现在底部 AutoLua日志 面板,报错的行可以直接点击跳转到源码。
连接设备
手机端默认监听 19800 端口。四种连法,在左侧 设备 视图里都能点:
| 方式 |
适用场景 |
说明 |
| 扫描设备 |
USB 数据线、模拟器 |
走 adb 找设备,点一下自动 adb forward 到本机端口再连 127.0.0.1,不依赖 WiFi |
| 手动连接 |
同一局域网的手机 |
输入手机上显示的 IP:端口 |
| ADB 网络连接 |
云手机(红手指等) |
输入 host:port(云机端口每次开机都会变,要重新粘贴) |
| 中继连接 |
手机和电脑不在同一个网络 |
通过中继服务器转发,跨网可用 |
USB 连接优先走 adb 通道传文件(adb push),比 WiFi 的 HTTP 上传快很多,也不受局域网限制。
云手机走 adb 隧道时,推送和截图会明显慢,这是隧道本身的带宽限制。追求流畅建议用中继连接。
界面导览
左侧活动栏(AutoLua 图标)
设备:设备列表、连接/断开、四种连接入口。连上以后显示 Android 版本和分辨率。
工具:分三组
- 项目:初始化项目、打包 APK
- 开发工具:图色工具、透明图制作、字库工具、OCR训练、A星区域、语音合成、地图拼接、UI 设计器、内存搜索、函数文档
- 帮助:SDK更新、AAR更新、检查更新、调试APK下载、关于插件
API 参考:函数搜索面板,输入关键字直接查签名和示例。
底部日志面板
日志带时间戳,脚本报错的行是可点击的,点一下跳到对应源码位置。推送项目文件时这里会显示总进度条(含速度、当前文件名,可取消)。
顶部工具栏按钮:
| 按钮 |
功能 |
| ▶ / ⏸ |
空闲时是运行;运行中变暂停;已暂停时是橙色三角(点=继续) |
| ■ |
停止脚本(空闲时变暗) |
| ≡ |
整理代码(会删除空行) |
| ☰ |
整理代码(保留空行) |
| // |
注释 / 取消注释 |
| ↶ ↷ |
撤销 / 重做(作用于当前编辑器) |
| 清空 |
清空日志 |
暂停状态和手机悬浮球是同步的:在手机上按暂停,插件按钮也会跟着变,反之一样。
快捷键
| 快捷键 |
功能 |
F5 |
运行脚本 |
F6 |
停止脚本 |
F9 |
暂停 / 继续 |
F4 |
整理代码 |
F7 |
注释 / 取消注释 |
F8 |
初始化项目 |
Ctrl+Alt+C |
连接设备 |
Ctrl+Alt+S |
截图工具 |
Ctrl+Alt+J |
跳转到日志位置 |
.lua 文件的编辑器右上角也有 ▶ ■ 按钮,右键菜单里有运行/停止/整理/注释。
项目结构
初始化项目(F8)会生成:
项目根目录/
├── project.json 项目配置(包名、应用名、版本、图标等,打包 APK 读它)
├── scripts/
│ ├── main.lua 入口脚本(运行时始终从这里开始)
│ └── 统一图色.lua 图色封装库,require 引用
├── res/
│ ├── ui.json UI 设计器的界面配置
│ ├── images/ 找图用的图片
│ ├── models/ YOLO 等模型文件
│ ├── flib/ 点阵字库
│ └── tessdata/ Tesseract OCR 训练数据
├── .gitignore
└── README.md
运行时 scripts/ 和 res/ 会整体推送到手机,脚本里用相对路径引用资源即可。
入口固定是 scripts/main.lua。如果你当前打开的是库文件(比如 统一图色.lua),按 F5 会自动改成运行 main.lua,不会去执行库文件本身。
运行机制
按下 F5 之后的完整流程:
- 语法检查 — 本地先过一遍 Lua 语法,有错直接报行号,不浪费一次真机往返
- 增量推送 — 只推有变化的文件(按修改时间+大小判断),大文件(>2MB)自动分块并支持断点续传
- 推送校验 — 有文件没推成功就中止运行,避免拿着旧资源跑出难查的错
- 下发执行 — 脚本发到手机,日志实时回传
- 状态轮询 — 每 500ms 查一次手机上的脚本状态,脚本自己跑完了,插件按钮会自动回到空闲
重新连接设备会清空推送缓存,下次运行全量推一遍(防止换设备后漏文件)。
开发工具
| 工具 |
用途 |
| 图色工具 |
抓取真机截图,取色、框选区域、直接生成找图/找色代码 |
| 透明图制作 |
抠图做透明模板,提高找图容错 |
| 字库工具 |
点阵字库样本采集与管理(.flib) |
| OCR训练 |
Tesseract 字库训练 |
| A星区域 |
地图标注 + A* 寻路调试 |
| 语音合成 |
文字转 mp3/webm,脚本里播报用 |
| 地图拼接 |
实时截图拼接大地图,配合寻路 |
| UI 设计器 |
拖拽设计脚本界面,导出 res/ui.json |
| 内存搜索 |
CE 风格内存搜索与修改(需 root) |
| 函数文档 |
全部 API 的说明、参数、示例,以及 Lua 教程 |
API 概览
手机端提供 43 类 内置函数。下面是常用的一小部分,完整列表和参数说明看 工具 → 开发工具 → 函数文档(或右侧 API 参考 搜索)。
全部分类(点开)
基础函数、触摸函数、设备信息、截图函数、找色函数、找图函数、图像处理、坐标转换、OCR识别、Tesseract OCR、点阵字库、YOLO检测、A*寻路、画框调试、内存操作、文件操作、系统操作、应用管理、剪贴板、加密解密、JSON、HTTP、数据存储、定时器、设备控制、资源管理、无障碍服务、脚本控制、UI对话框、UI系统、选择器、多线程、Console日志、图片数据、编码转换、短信功能、计时器数组、工具函数、云控、Socket通信、HID键鼠、十六进制、分辨率自适应
基础与触摸
sleep(1000) -- 等待毫秒
log("内容") -- 输出到插件日志面板
toast("提示") -- 手机上弹提示
tap(x, y, [duration]) -- 点击(click 是别名)
longPress(x, y, [duration]) -- 长按
swipe(x1, y1, x2, y2, [duration]) -- 滑动
tapRandom(x, y, rx, ry) -- 带随机偏移的点击
截图与找图找色
keepScreen() -- 锁定一张截图,多次查找共用(快很多)
releaseScreen() -- 释放
imgFind(x1, y1, x2, y2, imgPath, [sim], [isGray], [center], [direction])
imgFindAll(x1, y1, x2, y2, imgPath, [direction], [sim], [isGray], [center])
imgFindEX(...) -- 多尺度/增强版找图
colorGet(x, y) -- 取色
colorCmp(x, y, color, [sim]) -- 比色(单点)
colorCmpMulti(points, [sim]) -- 多点比色 "x|y|颜色,..."
colorFind(x1, y1, x2, y2, color, [direction], [sim])
colorFindMulti(x1, y1, x2, y2, mainColor, offsetColors, [direction], [sim])
文字识别
ocr([x1, y1, x2, y2]) -- 内置 OCR 识别区域文字
ocrFind(text, [x1,y1,x2,y2], [allowError])
tessInit([lang], [dataPath]) -- Tesseract
tessOcr(x1, y1, x2, y2, [lang], [psm], [whitelist])
fontLibLoadNamed(name, path) -- 点阵字库(游戏字体最准)
fontLibFind(text, x1, y1, x2, y2, [sim], [libName], [direction])
坐标转换(游戏坐标 ↔ 屏幕坐标)
-- 喂几组样本自动算出参数,样本 = {角色游戏X, 角色游戏Y, 目标屏幕X, 目标屏幕Y, 目标游戏X, 目标游戏Y}
coordCalibrate(screenCX, screenCY, samples)
getScreenPos(charGameX, charGameY, targetGameX, targetGameY) -- 游戏坐标 → 屏幕像素
getNpcScreenPos(refScreenX, refScreenY, refCharX, refCharY, curCharX, curCharY)
getItemGameCoord(charGameX, charGameY, itemScreenX, itemScreenY) -- 反算游戏坐标
系统与无障碍
shell(cmd) shellSu(cmd) -- 执行命令 / root 执行
hasRoot() -- 有没有 root
keyPress(keyCode) keyBack() keyHome() keyRecent()
inputText("文字") -- 输入文字
clickText("确定") -- 无障碍:按文字点控件
clickId("com.x:id/btn")
waitText("加载完成", 10000)
findNodeByText("登录")
界面、多线程、网络
ui.load("res/ui.json") ui.show() ui.get("输入框") ui.set("开关", true)
ui.alert("标题", "内容") ui.confirm("标题", "确定吗")
thread.create(func) thread.start(h) thread.join(h)
channel.create() lock.create() atomic.create(0)
httpGet(url, [headers]) httpPostJson(url, table) httpDownload(url, path)
socket.tcp() hid.tap(x, y) hex.crc16(data)
分辨率自适应
setBaseResolution(1280, 720) -- 声明脚本按哪个分辨率写的
mapXY(x, y) -- 坐标自动换算到当前设备
统一图色封装
初始化项目 会在 scripts/ 下生成 统一图色.lua,把找图/找色/取色/比色/找字收进一个入口,还内置了等待出现、等待消失、点击后复检、共用截图这些常用套路。
local 图色 = require("统一图色")
-- 先建库(一次性写好参数)
图色.找图库 = { 飞鞋 = {"@im_1:飞鞋", 188,123,337,362, 1, 0.6, false, true} }
图色.字库 = { 确定 = {"确定", 0,0,720,1280, 0.9} }
-- 再按名字用
图色("找图", "飞鞋", {点击=true}) -- 找到就点
图色("找字", "确定", {点击=true, 等待消失=8, 就近消失=true}) -- 点完确认弹窗消失
图色.等待出现("找图", "飞鞋", 10) -- 等它出现,最多10秒
图色.等待点击("找字", "确定", 10) -- 等出现→自动点
图色.截图() -- 多次查找共用一张图
图色("找色", "红点")
图色.释放()
四种调用形式、建库列顺序、全部选项(点击/坐标/未找到坐标/等待消失/就近消失/区域/相似度/自动管理)都写在文件开头的注释里,分 9 节,直接打开 统一图色.lua 看。
打包 APK
工具 → 项目 → 打包 APK,在配置界面填包名、应用名、版本、图标,然后编译。产物是能独立运行的 APK,脚本和资源已经打进去。
前提:装好构建环境(帮助 → SDK更新),或在设置里把 autolua.localBuildEnvPath 指向已有的 jdk/android-sdk/gradle 目录。签名证书在初始化项目时已自动生成并备份到用户目录。
常见问题
扫描到设备但连不上?
确认手机上 AutoLua 已启动(服务在跑)。USB 连接会自动做端口转发,如果之前的转发是坏的,插件会先清掉再重建。
云手机推送/截图很慢?
adb 隧道带宽有限,大图和整包推送会卡。用中继连接会顺畅得多。云机端口每次开机都会变,连不上先确认端口。
分辨率显示得不对?
插件显示的是物理分辨率(含导航栏区域),和某些截图工具去掉导航栏后的数值可能不一样。
keyPress 没反应?
注入按键需要 root:有 root 时任意键都能发;没 root 只能走无障碍,只支持返回/桌面/多任务(4/3/187),其它键 Android 不允许外部注入。
截图一直要重新授权?
MediaProjection 授权跟着服务生命周期。关掉悬浮球会释放截图服务,下次启动需要重新授权,这是系统限制。
底部面板标签为什么是大写?
面板标签页被 IDE 自身样式(text-transform: uppercase)强制大写,所有插件都一样。本插件的标题用了 Unicode 数学字母绕开这条规则,所以显示的是 AutoLua日志。
更新
帮助 → 检查更新 查插件新版;SDK更新 / AAR更新 分别更新构建环境和 autolua-core.aar。遇到问题进 QQ 群反馈。