LuaView第二階段學習—— Debugger & Download

第一階段學習 LuaView掺出,已經對其有一定的了解:什么是LuaView灾测、LuaViewCore够话,自定義控件的橋接等慎皱。(詳見 LuaView初識)此部分主要對 LuaViewSDK 自帶的調試工具 LuaViewDebugger 和 如何下載 Server 端的 Lua 腳本進行 Native 界面的渲染做記錄谅河。

LuaViewDebugger

LuaViewDebugger 是 LuaViewSDK 提供的 Lua 腳本調試工具咱旱。因為在 Xcode 上無法斷點調試 Lua 腳本,用指令調試又顯得麻煩绷耍。LuaViewDebugger 剛好解決了 Lua 腳本斷點調試的問題吐限。

但是這個工具功能也過于簡單了些。和 LuaViewSDK 官方人員聊了下褂始,其實就是對 Lua 調試指令做了一次封裝而已诸典,沒有其他擴展功能。

啟動這個 LuaViewDebugger 崎苗,Mac OS 下需要下載 JDK 的支持狐粱,JDK 下載地址 。點擊啟動 LuaViewDebugger 如下圖所示:

此時在項目里面隨意 run 一個 Lua 腳本胆数,LuaViewDebugger 就會展開成如下界面肌蜻,

可以進行斷點調試,也可以點擊變量打印必尼。其他也沒啥功能了蒋搜。目前 Android 端是無法用此工具進行調試。和官方人員聊判莉,其意思是不建議用這個做調試豆挽,可能存在某些未知問題吧。

最開始想實現(xiàn)斷點調試券盅,?由于官方沒有 Debugger 相關的文檔帮哈,故自己去琢磨其 SDK 的 Debuger 類源碼,從中分析用法锰镀。本地搭建個服務器娘侍,設置好端口和 IP 咖刃,調試器設置為開啟,demo 跑起來后私蕾,套接字創(chuàng)建好僵缺,也成功鏈接,run了一個腳本踩叭,發(fā)現(xiàn)最后一直在? DebugReadCmd 和 DebugSleep 倆方法死循環(huán),界面也沒渲染成功翠胰,卡死在那容贝。后來不明所以詢問官方人員,就叫使用其提供的 Debug 服務器之景。如有此方面經驗的斤富,麻煩告知我自己實現(xiàn)錯在哪里,謝謝锻狗!

Download

之前運行的腳本都是放在項目的本地目錄下满力。實際運用中,腳本會放在 Server 端轻纪,進行動態(tài)下發(fā)油额,Native 下載好腳本后進行界面渲染等操作。

搭建本地服務器

網上有很多搭建本地服務器的方法刻帚,在此就不多說了潦嘶。下面是我的配置 json

將 Lua 腳本放到服務器目錄下,終端輸入 ?npm run serveapp 啟動服務器崇众。

Native 下載 Server 端的 Lua 腳本資源

Demo 中掂僵,我直接嘗試下載服務器的腳本 zip 包,然后本地解壓:

- (void)loadData{

? ?NSString*urlStr = luaResourceUrlStr;

? ?NSString*saveZipFilePath = [[[NSBundlemainBundle]bundlePath]stringByAppendingString:@"XQOnlineLuas.zip"];

? ?NSString*saveUnzipFilePath = [[NSBundlemainBundle]bundlePath];

? ?BOOLloadZipSucess = [XQDataHelperloadZipLuaFilesWithUrl:urlStrsavePath:saveZipFilePath];

? ?if(loadZipSucess) {

? ? ?NSArray*ary = [XQDataHelperunzipFileWithFilePath:saveZipFilePathpath:saveUnzipFilePath];

? ? ?if(ary) {

? ? ? ? ?NSLog(@"解壓成功顷歌,解壓的文件是:\n %@",ary);

? ? ?}

? }

}

其中下載方法:

+ (BOOL)loadZipLuaFilesWithUrl:(NSString *)urlStr savePath:(NSString*)savePath{

if(urlStr.length==0|| savePath.length==0) {

returnNO;

}

NSURL*url = [NSURL URLWithString:urlStr];

NSURLRequest*request = [NSURLRequest requestWithURL:url];

NSError*error =nil;

NSData*data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];

if(data !=nil){

NSLog(@"下載成功");

NSString *filePath = savePath;

sucess = [datawriteToFile:filePathatomically:YES];

}else{

NSLog(@"%@", error);

}

return sucess;

zip 包解壓我使用了第三方的 ZipArchive(SDK 里也有官方提供的 LVPkgManager 類可用于解壓)锰蓬。解壓方法:

+ (NSArray*)unzipFileWithFilePath:(NSString*)zipFilePath path:(NSString*)unzipFilePath{

BOOLsucess =NO;

ZipArchive*zip = [[ZipArchivealloc]init];

if([zipUnzipOpenFile:zipFilePath]) {

sucess = [zipUnzipFileTo:unzipFilePathoverWrite:YES];

if(!sucess) {

[zipUnzipCloseFile];

}

}

if(sucess) {

NSLog(@"解壓保存成功.");

return[zipgetZipFileContents];

}

else{

NSLog(@"解壓保存失敗.");

returnnil;

}

}

@end

由此實現(xiàn) Native 下載服務器的 zip 腳本包,然后解壓存儲眯漩,讀取運行芹扭,實現(xiàn) lua 腳本控制 Native 的界面渲染等。

擴展 —— 腳本控制下載腳本坤塞,并運行

在實現(xiàn)本地下載腳本的時候冯勉,突然有個想法:能否實現(xiàn) run 一個腳本 a,這個腳本 a 的作用是去服務器下載腳本 b摹芙,腳本 b 才是控制界面渲染的灼狰,a 控制下載 b 成功后,直接運行腳本 b浮禾。

當然這個官方文檔也沒用相關說明交胚,只能從源碼入手查找思路份汗。結果照了半天沒找到,求助官方群蝴簇。官方人員解答其 demo 里有個 dynamicsCode.lua 就是實現(xiàn)想法中 a 的功能杯活。結果搜尋了下此腳本,發(fā)現(xiàn) iOS 的 demo 里面沒有這個腳本熬词,只有 android 的 demo 目錄里有個 NUI_DynamicCode.lua 文件旁钧。關鍵方法如下:

查找其 SDK 里對應的 load 相關源碼,發(fā)現(xiàn)了如下所示:

腳本里加載另一個腳本的方法有如下三種:

loadfile? :參數(shù)是需要加載的腳本的路徑

load:參數(shù)是需要加載的腳本方法

loadstring:參數(shù)是需要加載的腳本內容

注:android 的 SDK 源碼中此處有點不同互拾。android 中只有 loadfile 和 load歪今,其中 load 的參數(shù)可以是方法也可以是腳本內容,故 android 端的 load 等同于 iOS 端的 load 和 loadstring颜矿。所以在寫一份腳本兩端使用時寄猩,若使用 loadstring ,android端是無法識別的骑疆。

我的demo中田篇,分別對以上三種方式做了嘗試:

XQLuaLoad.lua 腳本是負責下載 server 端腳本 online0.lua ,并運行箍铭。

--待下載的腳本url

fileUrl = "http://xxxxx/XQOnline0.lua"

Download( fileUrl,"online0.lua",

? ? ? ?function (data)

? ? ? ?print( data );

? ? ? ?--使用loadstring的方式加載下載的腳本泊柬,并運行

? ? ? ?online0 = loadstring(tostring(data));

? ? ? online0();

end);

XQLuaLoad.lua 可以放在項目本地目錄,也可以放在 server 端坡疼,Native 需要先下載運行 XQLuaLoad.lua彬呻。該腳本中,我用了 SDK 中 LVDownloader 類的下載方法柄瑰。當然如 LuaView初識?描述的闸氮,你也可以自定義下載方法,然后橋接到 Lua 環(huán)境中即可在腳本中使用教沾。

Demo 效果如下:?

如有紕漏蒲跨,歡迎指出,謝謝授翻!

Demo地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末或悲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子堪唐,更是在濱河造成了極大的恐慌巡语,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淮菠,死亡現(xiàn)場離奇詭異男公,居然都是意外死亡,警方通過查閱死者的電腦和手機合陵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門枢赔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來澄阳,“玉大人,你說我怎么就攤上這事踏拜∷橛” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵速梗,是天一觀的道長肮塞。 經常有香客問我,道長镀琉,這世上最難降的妖魔是什么峦嗤? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮屋摔,結果婚禮上,老公的妹妹穿的比我還像新娘替梨。我一直安慰自己钓试,他們只是感情好,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布副瀑。 她就那樣靜靜地躺著弓熏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糠睡。 梳的紋絲不亂的頭發(fā)上挽鞠,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音狈孔,去河邊找鬼信认。 笑死,一個胖子當著我的面吹牛均抽,可吹牛的內容都是我干的嫁赏。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼油挥,長吁一口氣:“原來是場噩夢啊……” “哼潦蝇!你這毒婦竟也來了?” 一聲冷哼從身側響起深寥,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤攘乒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后惋鹅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體则酝,經...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年负饲,在試婚紗的時候發(fā)現(xiàn)自己被綠了堤魁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喂链。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖妥泉,靈堂內的尸體忽然破棺而出椭微,到底是詐尸還是另有隱情,我是刑警寧澤盲链,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布蝇率,位于F島的核電站,受9級特大地震影響刽沾,放射性物質發(fā)生泄漏本慕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一侧漓、第九天 我趴在偏房一處隱蔽的房頂上張望锅尘。 院中可真熱鬧,春花似錦布蔗、人聲如沸藤违。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽顿乒。三九已至,卻和暖如春泽谨,著一層夾襖步出監(jiān)牢的瞬間璧榄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工吧雹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留骨杂,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓吮炕,卻偏偏與公主長得像腊脱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子龙亲,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內容

  • 0. 前言 最近一直在寫Lua腳本陕凹,有時候出了問題,不知道是Lua層的問題鳄炉,還是上游的問題杜耙,不知道從何下手。于是我...
    ZSpirytus閱讀 2,356評論 0 3
  • 前言 作為一名iOS開發(fā)工程師拂盯,App的動態(tài)化是一種趨勢佑女,畢竟需求的增多,頻繁的提交版本、更新版本對用戶體驗上肯定...
    小千閱讀 4,537評論 6 52
  • iOS開發(fā)系列--網絡開發(fā) 概覽 大部分應用程序都或多或少會牽扯到網絡開發(fā)团驱,例如說新浪微博摸吠、微信等,這些應用本身可...
    lichengjin閱讀 3,641評論 2 7
  • 最近時常在想嚎花,成都讓音樂人留下膾炙人口的民謠歌曲和外鄉(xiāng)人癡癡的向往寸痢。然而成都讓小思留下的只是一份西點情懷。...
    小思Yookee閱讀 395評論 4 2
  • 語文學習了祖國多么廣大紊选,日積月累里面的詞語啼止,還學了誰和誰好。讀讀童謠和二歌兵罢,數(shù)學改試卷上的錯題献烦,美術課上畫了云朵上...
    王梓旭1閱讀 183評論 0 0