在Android上使用LuaJ在Lua脚本中需要其他lua脚本

时间:2014-12-21 11:00:44

标签: android lua luaj

我无法通过Android上的LuaJ从Java调用Lua脚本,需要其他Lua脚本。我认为这与我目前的工作目录有关。

我在Java中尝试的是什么:

InputStream input = EvilApp.getContext().getAssets().open("lua/pathTest.lua");
Prototype p = LuaC.instance.compile(input, "pathTest.lua");
LuaValue g = JsePlatform.standardGlobals();
LuaClosure c = new LuaClosure(p, g);
c.call();

pathTest.lua:

require "Foo"
local str = Foo.getString()
print(str)

对于这个特定的测试,为了简单起见,两个lua文件都在同一个目录中,但我需要相对路径到其他lua文件。

我尝试过使用package.path,但我尝试过没有尝试过。在Android中运行时,默认情况下package.path ==“?.lua”。

我通过命令行使用相对路径运行此测试,使用Koneki运行Eclipse内部,并且它们工作正常。特别是Android环境失败了。

此外,我能够获得Lua脚本而无需在Android中正常工作。

1 个答案:

答案 0 :(得分:1)

找出一个解决方案。添加package.path的绝对路径。例如,我的Lua脚本包含在我的assets文件夹中,因此添加:

package.path = package.path .. ";/assets/lua/?.lua;"

/assets/lua/中包含的文件的要求有效之前

同样,删除前导反斜杠:

package.path = package.path .. ";assets/lua/?.lua;"

也有效,所以看起来LuaJ默认启动Android项目根目录下的package.path。但是,我无法获得其他相对路径,例如:

package.path = package.path .. ";assets/../assets/lua/?.lua;"