我想出了如何使 Lua 脚本在 Android 环境中需要其他 Lua 脚本。
但是,该解决方案在顶级 Lua 脚本本身中有 package.path 配置。我想将 package.path 配置移动到运行脚本的 Java 代码,因为 package.path 特定于 Android 环境,而脚本可以在任何地方运行。
这是我尝试过的:
InputStream input getAssets().open("lua/test/pathTest.lua");
Prototype prototype = LuaC.instance.compile(input, "pathTest.lua");
Globals globals = JsePlatform.standardGlobals();
globals.load(new BaseLib());
globals.load("package.path = package.path .. ';/assets/lua/?.lua;/assets/lua/test/?.lua'");
LuaClosure c = new LuaClosure(prototype, globals);
c.call();
我还尝试了其他一些形式,例如:
globals.load(new StringReader("package.path = package.path .. \";/assets/lua/?.lua;/assets/lua/test/?.lua\""), "pathTest.lua");
或者从负载中获取 LuaValue 结果并将其传递给 LuaClosure。它们都导致脚本一开始就失败require
,无法找到引用的脚本。
有人有想法么?
*edit - 如果有人知道如何将工作目录设置为 /assets/lua/ 文件夹,那么我可以在 Lua 脚本中使用相对路径,那就更好了。