在發(fā)布了新版apk后,發(fā)現(xiàn)有bug,通常是修復(fù)好bug后,經(jīng)過(guò)測(cè)試等一系列流程,再發(fā)布到各個(gè)平臺(tái)上,這樣做特別耗時(shí)且頻繁下載更新使用戶體驗(yàn)很差。而使用熱修復(fù)發(fā)現(xiàn)bug后,只需修改后發(fā)布補(bǔ)丁包,無(wú)需用戶下載。
因?yàn)槲宜臼褂昧薭ugly作為線上監(jiān)測(cè)工具,所以使用bugly來(lái)實(shí)現(xiàn)熱修復(fù),bugly熱修復(fù)實(shí)際是對(duì)騰訊的Tinker進(jìn)行了封裝,配置更簡(jiǎn)單,使用更方便。具體步驟各位自己配置一次印象才會(huì)更加深刻,畢竟好記性不如爛筆頭,實(shí)踐出真知。
Tinker使用的是類加載方案實(shí)現(xiàn)熱修復(fù)。
類加載方案步驟原理:
有pathClassLoader和DexClassLoader都是繼承了BaseDexClassloader
1.在BaseDexClassloader創(chuàng)建的時(shí)候 就創(chuàng)建了一個(gè)pathDexList,
2.在pathDexList構(gòu)造器中調(diào)用makeDexElements ()方法初始化Element數(shù)組并將其賦值給成員變量dexElements。而且,通過(guò)makeDexElements()方法源碼可以看到它所做的事情就是遍歷傳遞過(guò)來(lái)的dexPath,然后依次加載每個(gè)dex文件。
3.之后pathDexList調(diào)用findClass方法去找到相應(yīng)的dex文件,
4.我們將修改后的文件打包成dex放到dexELements的最前面
5.通過(guò)dexclassloader類加載器就會(huì)加載到正確的dex文件,不會(huì)再加載后面crash的文件,即完成熱修復(fù)。
參考文章
http://www.itdecent.cn/p/08748b128ce3
https://blog.csdn.net/u013408979/article/details/81334742
http://www.itdecent.cn/p/cb1f0702d59f