惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
腾讯CDC
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
LINUX DO - 热门话题
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Project Zero
Project Zero
V
Vulnerabilities – Threatpost
Cisco Talos Blog
Cisco Talos Blog
P
Palo Alto Networks Blog
C
Cisco Blogs
A
Arctic Wolf
月光博客
月光博客
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
量子位
小众软件
小众软件
Latest news
Latest news
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
T
The Exploit Database - CXSecurity.com
Security Latest
Security Latest
N
Netflix TechBlog - Medium
K
Kaspersky official blog
人人都是产品经理
人人都是产品经理
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
Y
Y Combinator Blog
P
Proofpoint News Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
S
Schneier on Security
D
Docker
Scott Helme
Scott Helme
MyScale Blog
MyScale Blog
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
GbyAI
GbyAI
有赞技术团队
有赞技术团队
Google DeepMind News
Google DeepMind News
The Hacker News
The Hacker News
H
Help Net Security
Simon Willison's Weblog
Simon Willison's Weblog
J
Java Code Geeks
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tenable Blog
B
Blog
Know Your Adversary
Know Your Adversary
IT之家
IT之家

Lua

用 Lua 写 Android 应用? AutoLua 做到了 - V2EX 使用 Android Lua Helper 在 VSCODE 中调试安卓 Lua 应用 - V2EX skynet 怎么给 mysql drive 增加对 caching_sha2_password 的支持 - V2EX 奇怪的小问题 - V2EX Lua 代码上的优化,相互学习一下 - V2EX openresty + lua 这个地方怎么写 - V2EX 求一份 lua 入门教程 - V2EX 有关 Lua 调用 C++ 编译动态库程序 - V2EX 飞书 + Lua 实现企业级组织架构登录认证 - V2EX 为什么游戏架构要用事件来驱动? - V2EX vscode 上写 lua 有显示注释的插件吗? - V2EX lua 为什么要使用~=当作不等于运算符? - V2EX 请问现在 lua 混淆用什么工具,求常年 lua 的老哥指点 - V2EX lua 的前景如何? - V2EX core_framework - 基于 libev 的轻量级 lua 网络开发框架 如何构建伪视频流服务? 低延时低采样, 基于 OpenResty , HTTP, 内网... TP-Link 官方使用的是开源固件? 表达过去、现在与将来:之将来(1) - V2EX 有个问题, lua 平时能用来做做什么 - V2EX ngx_lua 遇到的一个小坑 - V2EX Lua IDE 各位 V 友,用 lua 作为开发语言用什么 IDE 可以方便代码提示以及调试呢 - V2EX Lua 怎么实现 php strstr() 函数的功能 - V2EX 使用 Sol2 来进行 Lua 绑定 - V2EX luarocks 使用上的一些小技巧 - V2EX 正在用 lua 写一个 nginx 防盗链的拓展,遇到了一个问题。 - V2EX 9k-18k 宁波 经验 3-5 年 本科及以上 全职 职位诱惑 : 年终奖 出国旅游 顶级办公设备及环境 - V2EX 关于 Lua 的标准库 - V2EX Torch - V2EX 一个在 MediaWiki 里面加入 Lua 脚本的插件 - V2EX ngx_lua_reqstatus 实时监控 Nginx 域名 qps 的 lua 拓展 - V2EX 首页搜索到 14 个 python,现在应该是 15 个了,为神马没有 lua 一席之地 - V2EX 学习 ngx_lua - V2EX 用 Lua 写 Telegram 的 Bot - V2EX Lua 资料收集整理 - V2EX 云风翻译了 Lua 5.3 的手册 - V2EX 我对 Lua coroutine 的理解,希望有人能指点下有哪些更适合的使用场景或高阶用法~ - V2EX Lua 5.3 - V2EX 为什么 Lua 本身不包含像 endswith() 之类的特别常用的字符串函数呢? - V2EX 为 Atom 写了一个 linter-luacheck,希望大家喜欢 - V2EX lua 如何最快速度入门 - V2EX 学习 Lua,请问各位有什么书推荐? - V2EX lua 很牛啊,有人在服务端用 ta 么? - V2EX LÖVE - V2EX Scripting Nginx with Lua - V2EX 关于 openssl aes-256-cbc 的一些参数 - V2EX LuaJIT 2.1 PPA - V2EX 谁会Luci的cbi模块?怎样实现重启服务? - V2EX lua有没有3des加密解密的模块? - V2EX 关于学习 Lua 有什么好书推荐么? - V2EX lua好像有种简化的语法,叫啥来着 - V2EX
Android 上直接用 Lua 调 Java API 写脚本——AutoLua 技术分享 - V2EX
haikejishu · 2026-06-18 · via Lua

1. 背景

安卓自动化工具不少,但它们有一个共同问题:脚本能力受限于工具给你封装了什么。

按键精灵给你录屏回放,你就只能录屏回放。Tasker 给你可视化规则,你就只能在规则里打转。

想调个系统 API ?想操作文件?想写个自定义 UI ?——等官方更新,等社区插件,或者干脆做不了。

AutoLua 的思路相反:不给你封装功能,给你一个完整 Lua 运行时,然后把 Android API 全部桥接给你。你能用 Java 做什么,就能用 Lua 做什么。

2. 技术栈

┌─────────────────────────────────┐
│          Lua 脚本层              │
│  ScriptApi / luajava.bindClass  │
├─────────────────────────────────┤
│          Lua 5.3 运行时          │
│       (完整版,非沙箱阉割)       │
├─────────────────────────────────┤
│       LuaJava JNI 桥接层         │
│   Lua ↔ Java 对象双向映射        │
│   同进程直接调用,零序列化开销     │
├─────────────────────────────────┤
│          Android 层              │
│  ┌────────────┬───────────────┐ │
│  │ 无障碍服务  │   Root Shell  │ │
│  │ (免 Root)  │               │ │
│  └────────────┴───────────────┘ │
└─────────────────────────────────┘

核心是 LuaJava——让 Lua 能 new Java 对象、调 Java 方法、读 Java 字段。不是 IPC ,不是 WebSocket ,同一进程内直接桥接,零序列化开销。

启动时引入 ScriptApi ,Install2Global 把函数注入全局命名空间:

require("ScriptApi").Install2Global()

3.1 触控

-- 点击、滑动、长按
Tap(540, 2200)
Swipe(100, 800, 100, 400, 500)      -- 起点 → 终点,时长 ms
Touch(540, 2200, 2000)               -- 长按 2 秒

-- 多点触控
TouchDown(540, 2200, 0)               -- 触点 0 按下
TouchMove(600, 2300, 0, 100)          -- 触点 0 移动
TouchUp(0)                            -- 触点 0 抬起

-- 按键 & 输入
KeyPress("BACK")
InputText("Hello AutoLua")

3.2 图色

-- 单点比色
if CmpColor(540, 2200, "#FF0000", 0.95) then
    Tap(540, 2200)
end

-- 区域内找色,返回匹配坐标
local ret, x, y = FindColor(0, 0, 1080, 2400, "#FF0000", 0, 0.95)
if ret >= 0 then Tap(x, y) end

-- 多点找色(主色 + 偏移点数组)
local x, y = FindMultiColor(0, 0, 1080, 2400, "#FF0000",
    "10|20|#00FF00,-5|30|#0000FF", 0, 0.9)

3.3 截图 & 应用管理

SnapShot("/sdcard/screen.png")                       -- 全屏截图
Capture(100, 100, 500, 500, "/sdcard/crop.png")      -- 区域截图

RunApp("com.tencent.mm")                             -- 启动应用
KillApp("com.tencent.mm")                            -- 强制停止

底层细节:屏幕缩放一行 SetScreenScale 搞定,横屏自动转换坐标,KeepCapture / ReleaseCapture 缓存截图避免重复开销。ScriptApi 把这些全做了,表层 API 保持简洁。

4. 核心差异:桥接,不封装

这是 AutoLua 和同类工具最本质的区别。

别人的思路 AutoLua 的思路
扩展方式 等官方更新、找社区插件 luajava.bindClass() 直接用
能力边界 工具提供了什么就用什么 Android 能做什么就能做什么
语言 类 Basic / 阉割版 Lua / JS 子集 完整 Lua 5.3 运行时
技能迁移 离了这个工具就没用 通用 Lua 技能,写游戏写后端都能用
-- 需要什么,直接 import 什么
Intent   = luajava.bindClass("android.content.Intent")     -- 系统分享、跳转
File     = luajava.bindClass("java.io.File")               -- 文件操作
Bitmap   = luajava.bindClass("android.graphics.Bitmap")    -- 图片处理
Settings = luajava.bindClass("android.provider.Settings")  -- 系统设置

不需要等人更新。Lua 5.3 完整特性——闭包、协程、元表、多返回值——全部可用。学的 Lua 以后写 Redis 脚本、Nginx 模块、游戏逻辑都能用,不白学。

5. 代码画 UI

不是拖控件,不是选模板。UI 完全用代码描述,自由度等同原生开发。

-- 创建线性布局
layout = luajava.newInstance("android.widget.LinearLayout", activity)
layout.setOrientation(1)        -- 1 = VERTICAL

-- 创建按钮
btn = luajava.newInstance("android.widget.Button", activity)
btn.setText("点击我")

-- 设置点击监听
listener = luajava.createProxy("android.view.View$OnClickListener", {
    onClick = function(v)
        Toast.makeText(activity, "Hello", 0).show()
    end
})
btn.setOnClickListener(listener)

-- 组装
layout.addView(btn)
activity.setContentView(layout)

按钮圆角、弹窗透明度、控件间距——你写什么就是什么。没有可视化工具的限制,没有模板的约束。

6. 运行与工程

双模式运行:

模式 原理 适用场景
无障碍服务 AccessibilityService 触控注入 免 Root ,兼容 5.0–13
Root 模式 直接执行 shell 命令 权限更高,延迟更低

工程化支持:

  • .alp 压缩工程格式,创建、导入、导出、分享
  • 内置编辑器 Lua 语法高亮
  • 浮窗控制面板,运行状态可视化,随时暂停/停止
  • 异步执行,长任务不卡主线程
  • AES / RSA / MD5 / Base64 加解密全内置
  • HTTP 网络请求 + JSON 解析( OkHttp + Retrofit + Gson )

7. 怎么开始

  1. 下载 APK:https://www.autolua.top/
  2. 系统设置 → 无障碍 → AutoLua → 开启
  3. 新建工程 → 写脚本 → 跑

8. 最后

AutoLua 做的事情很简单:

把 Lua 运行时搬到 Android 上,把 Java API 桥接给你。

剩下能写出什么、用到哪里——是你的想象力决定的,不是工具决定的。

AutoLua · https://www.autolua.top/