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
收....


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM