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

收....