ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Android 上直接用 Lua 调 Java API 写脚本——AutoLua 技术分享

Android 上直接用 Lua 调 Java API 写脚本——AutoLua 技术分享 1. 背景安卓自动化工具不少但它们有一个共同问题脚本能力受限于工具给你封装了什么。按键精灵给你录屏回放你就只能录屏回放。Tasker 给你可视化规则你就只能在规则里打转。想调个系统 API想操作文件想写个自定义 UI——等官方更新等社区插件或者干脆做不了。AutoLua 的思路相反不给你封装功能给你一个完整 Lua 运行时然后把 Android API 全部桥接给你。你能用 Java 做什么就能用 Lua 做什么。2. 技术栈┌─────────────────────────────────┐ │ Lua 脚本层 │ │ ScriptApi / luajava.bindClass │ ├─────────────────────────────────┤ │ Lua 5.3 运行时 │ │ 完整版非沙箱阉割 │ ├─────────────────────────────────┤ │ LuaJava JNI 桥接层 │ │ Lua ↔ Java 对象双向映射 │ │ 同进程直接调用零序列化开销 │ ├─────────────────────────────────┤ │ Android 层 │ │ ┌────────────┬───────────────┐ │ │ │ 无障碍服务 │ Root 服务 │ │ │ │ (免 Root) │ │ │ │ └────────────┴───────────────┘ │ └─────────────────────────────────┘核心是LuaJava——让 Lua 能 new Java 对象、调 Java 方法、读 Java 字段。不是 IPC不是 WebSocket同一进程内直接桥接零序列化开销。3. 脚本 API启动时引入 ScriptApiInstall2Global把函数注入全局命名空间require(ScriptApi).Install2Global()3.1 触控-- 点击、滑动、长按Tap(540,2200)Swipe(100,800,100,400,500)-- 起点 → 终点时长 msTouch(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 图色-- 单点比色ifCmpColor(540,2200,#FF0000,0.95)thenTap(540,2200)end-- 区域内找色返回匹配坐标localret,x,yFindColor(0,0,1080,2400,#FF0000,0,0.95)ifret0thenTap(x,y)end-- 多点找色主色 偏移点数组localx,yFindMultiColor(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.test.demo)-- 启动应用KillApp(com.test.demo)-- 强制停止底层细节屏幕缩放一行SetScreenScale搞定横屏自动转换坐标KeepCapture/ReleaseCapture缓存截图避免重复开销。ScriptApi 把这些全做了表层 API 保持简洁。4. 核心差异桥接不封装这是 AutoLua 和同类工具最本质的区别。别人的思路AutoLua 的思路扩展方式等官方更新、找社区插件luajava.bindClass()直接用能力边界工具提供了什么就用什么Android 能做什么就能做什么语言类 Basic / 阉割版 Lua / JS 子集完整 Lua技能迁移离了这个工具就没用通用 Lua 技能写游戏写后端都能用-- 需要什么直接 import 什么Intentluajava.bindClass(android.content.Intent)-- 系统分享、跳转Fileluajava.bindClass(java.io.File)-- 文件操作Bitmapluajava.bindClass(android.graphics.Bitmap)-- 图片处理Settingsluajava.bindClass(android.provider.Settings)-- 系统设置不需要等人更新。Lua 完整特性——闭包、协程、元表、多返回值——全部可用。学的 Lua 以后写 Redis 脚本、Nginx 模块、游戏逻辑都能用不白学。5. 代码画 UI不是拖控件不是选模板。UI 完全用代码描述自由度等同原生开发。-- 创建线性布局layoutluajava.newInstance(android.widget.LinearLayout,activity)layout.setOrientation(1)-- 1 VERTICAL-- 创建按钮btnluajava.newInstance(android.widget.Button,activity)btn.setText(点击我)-- 设置点击监听listenerluajava.createProxy(android.view.View$OnClickListener,{onClickfunction(v)Toast.makeText(activity,Hello,0).show()end})btn.setOnClickListener(listener)-- 组装layout.addView(btn)activity.setContentView(layout)按钮圆角、弹窗透明度、控件间距——你写什么就是什么。没有可视化工具的限制没有模板的约束。6. 运行与工程双模式运行模式原理适用场景无障碍服务AccessibilityService 触控注入免 Root兼容 7.0–16Root 模式直接执行 shell 命令权限更高延迟更低工程化支持.alp压缩工程格式创建、导入、导出、分享内置编辑器 Lua 语法高亮浮窗控制面板运行状态可视化随时暂停/停止7. 怎么开始下载 APKhttps://www.autolua.top/新建工程 → 写脚本 → 跑8. 最后AutoLua 做的事情很简单把 Lua 运行时搬到 Android 上把 Java API 桥接给你。剩下能写出什么、用到哪里——是你的想象力决定的不是工具决定的。本文由 AutoLua 团队原创转载请注明出处。
返回列表