[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 ライブラリなどに制限が必要かも。