# AndroidLuaExample **Repository Path**: niuhuan520/AndroidLuaExample ## Basic Information - **Project Name**: AndroidLuaExample - **Description**: AndroidLuaExample, Lua 5.3.3和LuaJava移植到Android示例 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-03-19 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AndroidLuaExample update to Lua 5.3.3 and LuaJava ported to Android example [![License][licence_svg]][licence_url] [![Download][bintray_svg]][bintray_url] # Import add to build.gradle,${latest.version} is [![Download][bintray_svg]][bintray_url] ``` dependencies { compile 'com.blakequ.luajava:luajava:${latest.version}' } ``` maven ``` com.blakequ.luajava luajava ${latest.version} pom ``` # How to use you can download example and study how to use. add proguard rules ``` # luajava -keep class org.keplerproject.luajava.**{*;} # For native methods -keepclasseswithmembernames class * { native ; } ``` ## 1. init lua init lua file only once after start app ``` private void initLua(){ mLuaState = LuaStateFactory.newLuaState(); mLuaState.openLibs(); //push Log object to lua, in lua using like: Log:i(TAG, "this log can show in AS logcat window") try { mLuaState.pushObjectValue(Log.class); mLuaState.setGlobal("Log"); } catch (LuaException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } ``` ## 2. add lua file to raw ``` app/src/main/res/raw/luafile.lua function GetVersion(info, intvalue) Log:i("LuaLog", info..intvalue) print('this log') return 1 end ``` ## 3. invoke lua function ``` private void executeLuaFile() { mLuaState.getGlobal("GetVersion"); mLuaState.pushString("reload lua test");// input params mLuaState.pushNumber(10); mLuaState.call(2, 1);//2 input, 1 output String result = mLuaState.toString(-1); if (result == null){ System.out.println("GetVersion return empty value"); }else { System.out.println("GetVersion return value"+result); } } ``` ## 4. invoke lua and error handle ``` private void executeLuaFile2() { //in lua file not exist this method:GetNotMethod mLuaState.getGlobal("GetNotMethod"); mLuaState.pushString("reload lua test");// input params mLuaState.pushNumber(10);//not use pushInteger //if using call will throw exception(can not catch), so you must use pcall //success to invoke method if return 0, otherwise is error. int retCode = mLuaState.pcall(2, 1, -1);//2 input, 1 output String result = mLuaState.toString(-1); if (retCode != 0){ LogUtils.e(TAG, "Fail to invoke GetNotMethod by lua errorCode:"+retCode+" errorMsg:"+result); }else { if (result == null){ System.out.println("GetVersion return empty value"); }else { System.out.println("GetVersion return value"+result); } } } ``` # Link - [AndroLua-mkottman](https://github.com/mkottman/AndroLua) - [AndroLua-new](https://github.com/lendylongli/AndroLua) - [LuaScriptCore](https://github.com/vimfung/LuaScriptCore) [bintray_svg]: https://api.bintray.com/packages/haodynasty/maven/AndroidLua/images/download.svg [bintray_url]: https://bintray.com/haodynasty/maven/AndroidLua/_latestVersion [licence_svg]: https://img.shields.io/badge/license-Apache%202-green.svg [licence_url]: https://www.apache.org/licenses/LICENSE-2.0