2014-12-21 2 views
2

У меня возникли проблемы с вызовами сценариев Lua с Java через LuaJ на Android, для которых требуются другие сценарии Lua. Я думаю, что это связано с моим текущим рабочим каталогом.Требование других сценариев lua из сценария Lua с использованием LuaJ на Android

То, что я пытаюсь в 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" по умолчанию.

Я проверил этот тест с относительными путями через командную строку и внутри Eclipse с помощью Koneki, и они отлично работают. Это, в частности, ситуация в Android, которая терпит неудачу.

Кроме того, я могу получить сценарии Lua без необходимости хорошо работать в Android.

ответ

1

Выбрано одно решение. Добавлен абсолютный путь к package.path. Например, мои Lua скрипты содержатся в папке моих активов, так что добавление:

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

перед требуется для файла, содержащегося в /assets/lua/ работах.

Аналогично, удаление ведущей обратной косой черты:

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

также работает, так что кажется, что LuaJ по умолчанию запускает package.path на корневой каталог Android проекта. Однако мне не удалось получить другие относительные пути для работы, например:

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