環境
- Windows 11 Home 21H2 22000.613
- Android Studio Bumblebee | 2021.1.1 Patch 1
- API 26: Android 8.0 (Oreo)
- luaj-3.0.1
準備
Android
Empty Activity で新規プロジェクトを作成しておきます。


Lua
次のページ から「luaj-3.0.1.zip」をダウンロードして展開しておきます。


手順
AndroidプロジェクトにLuaを導入
展開した luaj-3.0.1フォルダーの「lib」フォルダー内に「luaj-jse-3.0.1.jar」があるので、これを Androidプロジェクト の「app > libs」フォルダーにコピペします。

フォルダーにコピペすると、Android Studio の方に Luajライブラリ が表示されます。

そのまま「luaj-jse-3.0.1.jar」を右クリックし「Add As Library」を選択し、Lua を導入します。

Android から Lua実行
MainActivity
次のコードをコピペしてアプリを実行すると Lua が実行されます。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String myScript = "print(\"Hello Lua !!\")";
Globals globals = JsePlatform.standardGlobals();
LuaValue chunk = globals.load(myScript);
chunk.call();
}
}

実行
アプリを実行すると Lua がログを出力します。

Lua から Androidのメソッド実行
MyLua2Java
Lua から呼ばれるクラスを作成します。
public class MyLua2Java extends LibFunction {
private Context _context = null;
public MyLua2Java(Context context) {
_context = context;
}
public LuaValue call(LuaValue modname, LuaValue env) {
LuaValue library = tableOf();
library.set("toast", new toast());
env.set("MyLua2Java", library);
return library;
}
class toast extends OneArgFunction {
public LuaValue call(LuaValue x) {
Toast.makeText(_context , x.toString(), Toast.LENGTH_LONG).show();
return null;
}
}
}

MainActivity
次のように修正します。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String myScript = "MyLua2Java.toast(\"Hello Lua !!\")";
Globals globals = JsePlatform.standardGlobals();
globals.load(new MyLua2Java(this));
LuaValue chunk = globals.load(myScript);
chunk.call();
}
}

実行
アプリを実行すると Lua が Javaに作ったトーストを使います。
