android调用lua
项目发布以后由于外部数据的问题总是有部分逻辑代码要更改,而每次更改都必须从新发布,审核,下载,更新很是麻烦,客户流失严重。想过很多解决 方案,如:加个客户更新每次提示更新或者弄台服务器将外部数据统一等等,当然都不靠谱。前几日想到可以通过脚本来解决,由于脚本是个解释型语言不需要使得 程序重新编译发布等过程,维护起来相当方便。虽说执行效率会慢一点,但是那么点语句一点都影响。
正题,由于我只对lua比较熟悉所有首选lua。了解了一下android上调用lua的方法。
参考:http://blog.csdn.net/hpccn/article/details/8003454 我也没有编译,直接将他库托进我的项目
考虑到维护方便,我将lua代码文件放在了服务器上,通过(HttpURLConnection)加载lua文件
干货:
1 //根据URL得到输入流 2 public InputStream getInputStreamFromUrl(String urlStr) 3 throws MalformedURLException, IOException { 4 URL url = new URL(urlStr); 5 HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); 6 InputStream inputStream = urlConn.getInputStream(); 7 return inputStream; 8 }
1 // 将获得到的流保存到一个字符串里 2 private String loadAssetsString(String resPath) { 3 InputStream isread = null; 4 byte[] luaByte = new byte[1]; 5 try { 6 isread = getInputStreamFromUrl(resPath); 7 int len = isread.available(); 8 luaByte = new byte[len]; 9 isread.read(luaByte); 10 } catch (IOException e1) { 11 12 } finally { 13 if (isread != null) { 14 try { 15 isread.close(); 16 } catch (IOException e) { 17 } 18 } 19 } 20 return EncodingUtils.getString(luaByte, "UTF-8"); 21 }
1 //调用lua 2 3 LuaState L = LuaStateFactory.newLuaState(); 4 L.openLibs(); 5 String temp = loadAssetsString("http://192.168.1.21:6014/appupdate/testLua.lua"); 6 L.LdoString(temp); 7 8 L.getGlobal("text"); 9 String text = L.toString(-1); 10 11 // L.close(); 12 13 mTextView.setText(text); 14 15 16 //调用lua中的函数 17 L.getField(LuaState.LUA_GLOBALSINDEX, "cutStr"); 18 L.pushString("in the pad!"); //传入参数 19 L.call(1,1); //调用函数指定参数和返回值个数 20 21 L.setField(LuaState.LUA_GLOBALSINDEX, "a"); //将返回值保存到参数a中 22 LuaObject obj = L.getLuaObject("a"); //获取参数a 23 24 mTextView.setText(obj.toString());
lua代码:
1 text = "" 2 for i = 0,10 do 3 for k = 0,10-i do 4 text = "中" .. text 5 end 6 text = "\n"..text 7 end 8 9 10 function cutStr (str) 11 12 j = string.find(str,"pad") 13 k = string.find(str,"in") 14 restr = string.sub(str,k,j) 15 16 return restr 17 end
收....