熱修復(fù)筆記

在發(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容