使用场景
在autojs中使用lua
依赖jar
luaJ是一个java实现的lua脚本解释器
luaj-jse-3.0.1.jar
效果展示
autojs版本
原理
- luaj.jar执行lua
知识点
- 加载jar
- 导入类
- 创建globals管理lua全局
- 执行lua的两种方式
- 获取lua变量的值
代码讲解
- 加载jar
let dexFilepath = "./luaj-jse-3.0.1.jar"; runtime.loadJar(dexFilepath);
- 导入类
importClass("org.luaj.vm2.lib.jse.JsePlatform");
- 创建Globals对象来管理全局状态
globals = JsePlatform.standardGlobals();
- 执行lua文件
var luaPath = files.path("./luaTest.lua"); globals.loadfile(luaPath).call();
- 获取lua变量的值
c = globals.get("c").toString(); log("c: " + c);
- 另一种运行lua脚本的方式
s = ""; //lua脚本 s += "x=3\r\n"; s += "y=4\r\n"; s += "print ('hello world!')\r\n"; s += "function aa()\r\n"; s += "print ('aaa')\r\n"; s += "end\r\n"; s += "aa()\r\n"; s += "function method1()\r\n"; s += "return x * 2\r\n"; s += "end\r\n"; s += "c=method1(x)\r\n"; chunk = globals.load(s); //加载自己写的脚本 chunk.call(); //执行脚本 c = globals.get("c").toString(); //取得脚本里的变量d的值 log("c: " + c);
- lua代码
x = 3 y = 4 print("hello world!") function aa() print("aaa") end aa() function method1(x) return x * 2 end c = method1(x) print(c)
完整源码
let dexFilepath = "./luaj-jse-3.0.1.jar"; runtime.loadJar(dexFilepath); importClass("org.luaj.vm2.lib.jse.JsePlatform"); //创建Globals对象来管理全局状态 globals = JsePlatform.standardGlobals(); var luaPath = files.path("./luaTest.lua"); globals.loadfile(luaPath).call(); c = globals.get("c").toString(); //取得脚本里的变量d的值 log("c: " + c); // s = ""; //lua脚本 // s += "x=3\r\n"; // s += "y=4\r\n"; // s += "print ('hello world!')\r\n"; // s += "function aa()\r\n"; // s += "print ('aaa')\r\n"; // s += "end\r\n"; // s += "aa()\r\n"; // s += "function method1()\r\n"; // s += "return x * 2\r\n"; // s += "end\r\n"; // s += "c=method1(x)\r\n"; // chunk = globals.load(s); //加载自己写的脚本 // chunk.call(); //执行脚本 // c = globals.get("c").toString(); //取得脚本里的变量d的值 // log("c: " + c);