1. 程式人生 > >Lua熱更新問題

Lua熱更新問題

Lua熱更新後無法載入json檔案

公司最近遊戲進行大幅更改,需要熱更新功能。測試熱更新時發現一個很嚴重的問題。ios熱更完成後無法開啟新增的頁面,開啟就崩潰。作為一個cocos菜鳥開始了摸索之路,期間遇到了各種挫折,求助大神才搞定。

首先崩潰的時候,跟ios聯調看了一下日誌,沒發現什麼特殊異常,開始以為是下載檔案路徑有問題導致無法開啟檔案,仔細核對了熱更後的檔案路徑,沒有發現什麼問題,嘗試打開了一下檔案也沒有發現問題。然後仔細核對了程式碼中的下載路徑,也沒有發現問題,期間折騰來折騰去花了一兩個小時。

後來以為是熱更後設置lua路徑錯誤,仔細排查後確認沒問題。於是在模擬器上熱更ios包,發現熱更後的json檔案大小不對。直接下載熱更檔案大小無誤,排除掉上傳伺服器問題。那麼就只能是熱更下載程式碼有問題。經過仔細檢查程式碼後發現了一個大坑。

當時熱更程式碼如下:

loadXMLHttpRequest.responseType = cc.XMLHTTPREQUEST_RESPONSE_BLOB
loadXMLHttpRequest:open("GET", Cache.user.patch_update.patch_file_list)   

初看沒有什麼問題,但是此程式碼遇到json檔案則會下載失敗。

loadXMLHttpRequest:open("GET", Cache.user.patch_update.patch_file_list)  
loadXMLHttpRequest.responseType = cc.XMLHTTPREQUEST
_RESPONSE_BLOB

後將程式碼修改為這樣,熱更新成功。具體原理待填坑

思路整理
  1. 出現熱更失敗時,問題表現為新檔案佈局無法載入。先檢查下載檔案路徑是否正常。(我在除錯這一塊花了很多時間,走了很多彎路。應該一開始就測試檔案路徑的)
  2. 確定檔案路徑正常後,可檢查載入路徑程式碼,確保熱更後呼叫的路徑是熱更檔案。(這裡也浪費了時間,主要開始程式碼不夠熟悉,忽略了呼叫順序)
  3. 確認了呼叫路徑之後,檢查下載後的檔案,因為檔案都已經加密,則可以直接比較檔案大小與二進位制。(其實可以直接用模擬器熱更ios的加密包測試。不需要重新打包給ios測試。期間浪費了很多時間。)