移動開發特別是游戲開發領域,可熱更新基本是標配。我們的項目是采用Unity同時是采用第三方插件綁定c#與lua實現可熱更新。一段時間以來都是先在unity IDE開發完畢功能,之后再到手機上進行真機測試。由于真機環境畢竟與IDE環境有一定差別,所以真機上測試時有時出現一些不好查找的問題。當遇到這樣的問題時候之前唯一的測試方式就是加入輸出日志,打個版本,運行,測試。在修改下輸出日志,打個版本,運行測試。就這樣反反復復都快肝硬化了。這樣下去不妥,于是自己就試著思考能否優化這里面的一些環節,提升測試效率。
既然已經實現lua熱更新,那基于lua可以動態編譯運行的特性,我想在真機運行的時候是可以替換具體某個的lua文件的并運行新的腳本。基于這樣的出發點我列出了一下幾個關鍵技術點。
1.本地編輯器與手機端通信,實現手機端可獲得變化的文件內容
2.手機端替換變化lua文件并運行
3.本地編輯器需要能夠監聽文件變化。
4.手機端將日志同步到本地并在編輯器輸出。
基于以上幾點點我得到了第一版解的決方案。
本地編輯器選用 Sublime Text3 這個工具輕便靈活,同時便于擴展。通過它用python編寫插件實現本地編輯與手機客戶端通信,本地文件變化監聽,輸出手機端的日志。通信方式采用采用http(采用這個方式的初衷是與伙伴能快速出原型)為不與具體項目耦合所以該功能基于插件開發思想使其獨立具體的項目。具體架構如下圖一:
圖中有三大模塊:manager_debug_service(調試賬號管理系統),sublime-plugin (文本編輯插件), client-application(真機客戶端控制部分)
manager_debug_service:目的是管理注冊賬號便于其他開發者使用,這里每當開啟一個調試端都會注冊一個賬號和服務端連接地址 。當手機測試的手可輸入賬號去這個系統獲得調試編輯服務器地址。然后手機客戶端 client-application 直接連接 sublime-plugin 進行調試。
在開發的時候還是覺得這套系統還是有不方便的地方。比如會配置一個調試賬號管理系統。這個系統對客戶端來說有些不方便。manager_debug_service系統是否可以去掉?基于這樣的考慮就有了第二版本的方案
調整方案:
1.去掉manager_debug_service系統。
2.將服務端 從sublime-plugin移動到client-application
3.通信方式采用socket?
4.sublime-plugin 用戶連接要測試的手機端
基于上面幾點第二版架構如下圖二:
這樣第二版就比第一版簡單許多只有client-application 系統和sublime-plugin系統
client-application :有debug 部分和 application logic 部分,如果獨立具體項目實際只有debug部分,application logic 部分只是實現 debug部分的提供用于調試的 interface-debug接口。
基于這套系統的思想可以做很一些擴展延伸比如:斷點調試系統,自動測試系統,手機實時開發系統等等。