移動開發(fā)特別是游戲開發(fā)領(lǐng)域,可熱更新基本是標(biāo)配。我們的項目是采用Unity同時是采用第三方插件綁定c#與lua實現(xiàn)可熱更新。一段時間以來都是先在unity IDE開發(fā)完畢功能,之后再到手機(jī)上進(jìn)行真機(jī)測試。由于真機(jī)環(huán)境畢竟與IDE環(huán)境有一定差別,所以真機(jī)上測試時有時出現(xiàn)一些不好查找的問題。當(dāng)遇到這樣的問題時候之前唯一的測試方式就是加入輸出日志,打個版本,運(yùn)行,測試。在修改下輸出日志,打個版本,運(yùn)行測試。就這樣反反復(fù)復(fù)都快肝硬化了。這樣下去不妥,于是自己就試著思考能否優(yōu)化這里面的一些環(huán)節(jié),提升測試效率。
既然已經(jīng)實現(xiàn)lua熱更新,那基于lua可以動態(tài)編譯運(yùn)行的特性,我想在真機(jī)運(yùn)行的時候是可以替換具體某個的lua文件的并運(yùn)行新的腳本?;谶@樣的出發(fā)點我列出了一下幾個關(guān)鍵技術(shù)點。
1.本地編輯器與手機(jī)端通信,實現(xiàn)手機(jī)端可獲得變化的文件內(nèi)容
2.手機(jī)端替換變化lua文件并運(yùn)行
3.本地編輯器需要能夠監(jiān)聽文件變化。
4.手機(jī)端將日志同步到本地并在編輯器輸出。
基于以上幾點點我得到了第一版解的決方案。
本地編輯器選用 Sublime Text3 這個工具輕便靈活,同時便于擴(kuò)展。通過它用python編寫插件實現(xiàn)本地編輯與手機(jī)客戶端通信,本地文件變化監(jiān)聽,輸出手機(jī)端的日志。通信方式采用采用http(采用這個方式的初衷是與伙伴能快速出原型)為不與具體項目耦合所以該功能基于插件開發(fā)思想使其獨立具體的項目。具體架構(gòu)如下圖一:

圖中有三大模塊:manager_debug_service(調(diào)試賬號管理系統(tǒng)),sublime-plugin (文本編輯插件), client-application(真機(jī)客戶端控制部分)
manager_debug_service:目的是管理注冊賬號便于其他開發(fā)者使用,這里每當(dāng)開啟一個調(diào)試端都會注冊一個賬號和服務(wù)端連接地址 。當(dāng)手機(jī)測試的手可輸入賬號去這個系統(tǒng)獲得調(diào)試編輯服務(wù)器地址。然后手機(jī)客戶端 client-application 直接連接 sublime-plugin 進(jìn)行調(diào)試。
在開發(fā)的時候還是覺得這套系統(tǒng)還是有不方便的地方。比如會配置一個調(diào)試賬號管理系統(tǒng)。這個系統(tǒng)對客戶端來說有些不方便。manager_debug_service系統(tǒng)是否可以去掉?基于這樣的考慮就有了第二版本的方案
調(diào)整方案:
1.去掉manager_debug_service系統(tǒng)。
2.將服務(wù)端 從sublime-plugin移動到client-application
3.通信方式采用socket?
4.sublime-plugin 用戶連接要測試的手機(jī)端
基于上面幾點第二版架構(gòu)如下圖二:

這樣第二版就比第一版簡單許多只有client-application 系統(tǒng)和sublime-plugin系統(tǒng)
client-application :有debug 部分和 application logic 部分,如果獨立具體項目實際只有debug部分,application logic 部分只是實現(xiàn) debug部分的提供用于調(diào)試的 interface-debug接口。
基于這套系統(tǒng)的思想可以做很一些擴(kuò)展延伸比如:斷點調(diào)試系統(tǒng),自動測試系統(tǒng),手機(jī)實時開發(fā)系統(tǒng)等等。