zoukankan      html  css  js  c++  java
  • 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
    收....
  • 相关阅读:
    MatrixTraceTransform主要逻辑在transform方法中
    重写LayoutParams,读取子View自定义属性
    onLayout初始化裁剪信息
    drawChild中画阴影,裁剪出圆角
    继承ConstraintLayout
    如何创建自定义的Resource实例
    mysql优化整理(索引)
    java设计模式
    Oracle中MERGE语句的使用
    BigDecimal 转成 double
  • 原文地址:https://www.cnblogs.com/sambird/p/3181370.html
Copyright © 2011-2022 走看看