- 开干前的准备
1.安装lua插件 Intellij 系列 推荐emmylua
mac 只有 lua
2.下载LuaJ
推荐使用静态jar 下载地址
下载后选择luaj-jse-3.0.1.jar使用
maven库:compile 'org.luaj:luaj-jse:3.0.1'
*开鲁
lua代码
private void initLua(){
LogsUtils.iNative("initLua JsePlatform.standardGlobals()");
globals = JsePlatform.standardGlobals();
LogsUtils.iNative("initLua globals.loadfile");
//加载lua 脚本文件
LuaValue chunk = globals.loadfile(luaDirectoryFile.getAbsolutePath()+"/hello_lua.lua");
LogsUtils.iNative("initLua chunk.call()");
chunk.call();
}
private void callLua(String str) {
LogsUtils.iNative("callLua");
globals = JsePlatform.standardGlobals();
//加载lua 脚本文件
globals.loadfile(luaDirectoryFile.getAbsolutePath() + "/putstring.lua").call();
LogsUtils.iNative("获取全局函数 analysisData(str)");
LuaValue analysisData = globals.get(LuaValue.valueOf("analysisData"));
LogsUtils.iNative("调用并传递参数");
analysisData.invoke(new LuaValue[]{LuaValue.valueOf(str)});
}
private void luaReturn(String str) {
LogsUtils.iNative("luaReturn");
globals = JsePlatform.standardGlobals();
//加载lua 脚本文件 --重点.call()才执行编译
globals.loadfile(luaDirectoryFile.getAbsolutePath() + "/lua_return.lua").call();
LogsUtils.iNative("获取全局函数 luaReturn(str)");
LuaValue luaReturn = globals.get(LuaValue.valueOf("luaReturn"));
LogsUtils.iNative("调用并传递参数");
Varargs varargs = luaReturn.invoke(new LuaValue[]{LuaValue.valueOf(str)});
LogsUtils.iNative("读取lua 返回数据");
LuaValue luaValue = varargs.arg1();
LogsUtils.iNative("lua return =%s",luaValue.toString());
}
方法以此对应下方lua 函数
-- lua 编译测试
print("hello luaj !!!")
--callLua(String str)
function analysisData(str)
print("analysisData")
print(str)
end
--luaReturn(String str)
function luaReturn(str)
print("luaReturn")
print(str)
return "from lua:"
end
日志输出
I/-------LogsUtilsiNative: callLua
I/-------LogsUtilsiNative: 获取全局函数 analysisData(str)
调用并传递参数
I/System.out: analysisData
java call Lua 1551342404549
I/-------LogsUtilsiNative: luaReturn
I/-------LogsUtilsiNative: 获取全局函数 luaReturn(str)
调用并传递参数
I/System.out: luaReturn
luaReturn 1551342405700
I/-------LogsUtilsiNative: lua return =from lua: