2

我在需要其他 Lua 脚本的 Android 上通过 LuaJ 从 Java 调用 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 脚本。

4

1 回答 1

1

想出了一个解决方案。将绝对路径添加到 package.path 有效。例如,我的 Lua 脚本包含在我的资产文件夹中,因此添加:

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;"
于 2014-12-21T15:45:11.320 回答