[Android Code] Android のアプリケーションで Luaj
Luaj をダウンロードしてきて、libs にある luaj-jse-2.02.jar を Eclipse プロジェクトの libs ディレクトリに入れる。そして、Java Build Path の Libraries に Ad JARs... から選択する。
これでアプリケーションをコンパイルして持っていったときに luaj の jar ファイルが利用できる。
テスト目的で、Activity に配置したボタンを押すと raw/hello.lua ファイルを読み込んで実行するコードを書いてみる。以前使ったことがあるので簡単。
private String executeLuaj() { LuaValue _G = JsePlatform.standardGlobals(); LuaValue mainChunk = null; InputStream in = getResources().openRawResource(R.raw.hello); try { Prototype p = LuaC.compile(in, "hello"); mainChunk = new LuaClosure(p, _G); } catch (IOException e) { e.printStackTrace(); } if (mainChunk != null) { LuaValue ret = mainChunk.call(); return ret.tojstring(); } return ""; }
Lua のグロバル環境を _G として作成する。これの実体は table のはず。コードを実行する方法はいくつかあるが、ここでは Lua のバイトコードにコンパイルした Prototype を再利用できる方法で行っている。
コンパイルしたら LuaClosure に環境 _G 指定で押しこんで、call するだけ。Varargs を利用すれば引数も渡せる。
実際に組み込んでユーザーの Lua スクリプトを実行させるとなると、セキュリティの都合上、io や os、luajava ライブラリなどに制限が必要かも。