用 Lua 写 Android 应用? AutoLua 做到了

6 月 19 日
 haikejishu

做了个小工具,技术栈 LuaJava + Lua 5.3 。核心思路是把完整 Lua 运行时和 Android API 桥接,让脚本能直接调原生能力。

技术层面几个点

一段代码说清楚

-- import 直接用,零封装
import "android.widget.*"
import "android.content.Intent"
import "android.net.Uri"

-- 布局表构建 UI ,不是拖控件
layout = {
    LinearLayout,
    orientation = "vertical",
    { Button, text = "点我", id = "btn" },
}
activity.setContentView(LoadLayout(layout))

-- 事件绑定 — getter/setter 简写
btn.onClick = function(v)
    print("clicked")
    -- 直接调系统 API
    local intent = Intent(Intent.ACTION_VIEW)
    intent.setData(Uri.parse("https://www.autolua.top"))
    activity.startActivity(intent)
end

对比同类工具

AutoLua 按键精灵 Tasker Auto.js
语言 Lua 5.3 完整 类 Basic 可视化 JavaScript
调 Java API import 直接用 不支持 有限 有限
UI 构建 代码自由画 录制/模板 模板 模板

自由度不在一个维度。 Lua 不只是脚本语言,加 LuaJava 桥接后它成了 Android 的一等公民。

文档

欢迎搞机玩家和技术同好来玩。

3027 次点击
所在节点    Lua
13 条回复
uqf0663
6 月 19 日
参考下 autojs 原作者被喝茶后跑路的事件,建议 op 注意黑产防范注意安全
xwhxbg
6 月 19 日
有点意思,也许可以拿来做魔兽伴侣,让 lua 直接渲染到 apk 里
xuhuanzy
6 月 19 日
建议给 lua 上这个强类型提示 https://github.com/EmmyLuaLs/emmylua-analyzer-rust
我是主开发者, 有问题可以提
w568w
6 月 19 日
> 用 Lua 写 Android 应用? AutoLua 做到了

了解下 AndroLua 这个项目。快 10 年了,Android 4.0 时就存在了。

> Lua 5.3 完整运行时

可是现在 Lua 最新版是 5.5 啊,而且 5.5 也已经是半年多( 2025-12 )前发布的了。

> Lua 不只是 [...],它成了 [...]。

当务之急是学会自己写文章,而不是用 AI 写文案然后复制粘贴。

如果文案都懒得写,我就要怀疑项目是不是纯 Vibe coding ,以及代码质量是不是 AI 写完自己都懒得看一眼了。

> Auto.js 、Tasker 有限

据我所知,这两个都是可以完整调用所有 Java API 的吧。什么叫做他们「有限」,而 AutoLua 「 import 直接用」?这里的区别在哪?
aa51513
6 月 19 日
4 楼是大佬
haikejishu
6 月 19 日
@w568w 说实话感谢花时间写这么长,四点都认真看了,逐一回复:

1. AndroLua 确实值得学习,不过原版已经不更了,AutoLua 是目前活跃状态。
2. 选 5.3 不是追不上,是没找到升级的理由——功能够用、生态适配也都在 5.3 ,升不升级对开发者来说不难,但目前确实没必要。
3. AI 只是个工具,润色文案跟我用 IDE 自动补全没区别。代码能跑、逻辑是对的,为什么不能用?
4. "有限"是我表述不准确,已修正。Auto.js 和 Tasker 都能调 Java API ,区别在引擎和桥接效率,不在能不能。
haikejishu
6 月 19 日
@xuhuanzy 感谢,目前还在开发其他核心功能,后续空闲时可增加这个提示
haikejishu
6 月 19 日
@uqf0663 感谢提醒,这个我会注意的
w568w
6 月 19 日
@haikejishu

> AI 只是个工具,润色文案跟我用 IDE 自动补全没区别

区别在于 IDE 是确定性的,AI 不是。

另外我实在没看出来这个哪里是润色了,只会让人看到第一眼就认出是「 AI 泔水文案」然后直接退出页面……

AI 写文案的问题并不是说我「反感 AI 」,而是它经常会做出一些言过其实的夸张比喻、不符合人类直觉的伪人论述。

比如什么「零中间层。想调什么调什么」,我个人感觉就是:AI 非常刻意地想营造出一种虚伪亲切的营销和吹捧语气。因为任何做过开发的都知道,两个语言交互(哪怕是 C 和 C++)都肯定得有中间层做 bridge ,怎么可能「零中间层」呢?这是违反工程常识的,做过这方面开发的,一眼看就会觉得「这个人是不是根本不懂 FFI ?」。

还有「自由度不在一个维度」也是。正常人并不会这么说话,就算要吹自己的项目,也有更精确的方式(因为你了解自己写的项目),而不是泛泛拿一些特别大的 technobabble 来描绘一种虚幻的哲学层面愿景……

> 不是追不上,是没找到升级的理由
> 生态适配也都在 5.3

这是从哪里得出的结论?

> 区别在引擎和桥接效率

Talk is cheap, show me the number.
haikejishu
6 月 19 日
@w568w
1. 生态适配这块是我的技术积累和存量用户,简单说目前够用,这不是一个追求最新技术的产品。
2. 引擎和效率这块,我就说过一句有区别。引擎决定你用 Lua 还是其他语言开发,一眼能看出来。效率我没跑过对比测试,不乱下结论,但是 C 层的东西不会慢。
SP00F
6 月 20 日
自动化目前最优解是外置 😂
IceHippo
6 月 22 日
@haikejishu 感谢楼主做出这么好的项目
正好有个问题困扰好久,请教下能不能用这个解决,
最好是给个例子,没有写过安卓的 api ,缺少相关经验

我用的 vivo 的手机,没法设置屏幕长亮(不息屏),最长只能设置 10 分钟,导致需要长时间运行的程序会被自动息屏杀掉
目前规避的方案是把要长期运行的程序放小窗口,主屏上打开短视频,暂停视频

谢谢
haikejishu
6 月 22 日
@IceHippo 例如前台服务,浮窗,屏幕常亮等等,我在新版 AutoLua 运行脚本时自动处理,你可以试试能不能解决,QQ 群 731387610 ,还可搭配在线编辑器体验。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1221481

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX