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

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