在Android上使用LuaJ从Lua脚本中引入其他Lua脚本

我在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环境中失败。

此外,我能够在Android中使没有要求的Lua脚本正常工作。

点赞
用户3770919
用户3770919

找到了一个解决方案。将绝对路径添加到package.path中即可。例如,我的Lua脚本包含在我的资源文件夹中,因此在对/assets/lua/文件进行require之前添加:

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

同样,删除前导反斜杠:

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

也可以,因此似乎LuaJ默认从Android项目的根目录开始package.path。但是,我无法让其他相对路径起作用,例如:

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

注:以上内容为程序相关内容,非自然语言文本。

2014-12-21 15:45:11