環境
- 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 が実行されます。
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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 から呼ばれるクラスを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 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
次のように修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 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に作ったトーストを使います。
