Android熱更新
修改線上版本的bug完残,用技術(shù)去實(shí)現(xiàn)不更新整個(gè)apk的條件下,修改掉bug横漏。
在開發(fā)過程中谨设,沒有一個(gè)app發(fā)布到市場(chǎng)之后,在用戶的使用過程中百分百會(huì)發(fā)生崩潰缎浇,一般情況下不是B線的crash扎拣,只要控制app在crash一定的比例,常用的比例在千分之一以下就可以。但是在某些情況下二蓝,由于測(cè)試的不充分尊蚁,比如開發(fā)人員開發(fā)的不嚴(yán)謹(jǐn)導(dǎo)致app經(jīng)常性的崩潰,而這個(gè)崩潰的比率超過正常的話侣夷,比如說超過了千分之一横朋,甚至超過了千分之二分貝以后,在這些情況下我們只能緊急的修復(fù)出現(xiàn)線上的問題百拓,然后我們通過常用的方式琴锭,代碼修改然后進(jìn)行重新打包然后發(fā)布等等。同時(shí)在發(fā)布完要通過推送衙传,消息的形式告訴用戶要更新了要自動(dòng)安裝决帖。安卓熱修復(fù)技術(shù)出現(xiàn),讓我們能夠更快速的解決一些問題蓖捶,而不需要重新發(fā)布版本可以修復(fù)線上的BUG地回。
一,熱更新流程
1.線上檢測(cè)到嚴(yán)重的crash俊鱼。因?yàn)槊恳粋€(gè)app都會(huì)集成一些線上的crash的sdk刻像,這樣會(huì)通過線上的sdk檢查到app的運(yùn)作狀況,這其實(shí)就是一個(gè)熱修復(fù)的基礎(chǔ)并闲。在線上的crash統(tǒng)計(jì)中细睡,可以得知app是否存在需要快速在線熱修復(fù)的問題,如果存在帝火,會(huì)根據(jù)crash日志定位到代碼所存在的問題所在溜徙。
2.拉出bugfix分支并在分支上修復(fù)問題。開發(fā)都是在debug分支上開發(fā)的犀填,如果有單獨(dú)的業(yè)務(wù)邏輯蠢壹,可以從debug開啟另外一個(gè)分支來進(jìn)行開發(fā),在bugfix分支上修復(fù)一些線上的問題
3.Jenkins構(gòu)建和補(bǔ)丁生成
4.app通過推送或主動(dòng)拉取布丁文件九巡,并在合適時(shí)機(jī)推送給主用戶图贸。
5.將bugfix代碼合到master上,這樣會(huì)保證以后的代碼不會(huì)出項(xiàng)這樣的問題比庄。
二求妹,主流熱更新框架介紹
1.Dexposed Dexposed是一個(gè)阿里巴巴無(wú)線事業(yè)部推出的Android平臺(tái)的無(wú)侵入運(yùn)行期AOP開源框架乏盐,基于 Xposed 開源項(xiàng)目佳窑,旨在解決像性能監(jiān)控、在線熱補(bǔ)丁等移動(dòng)開發(fā)常見難題父能。
2.AndFix AndFix神凑,全稱是Android hot-fix。是阿里開源的一個(gè)熱補(bǔ)丁框架,允許APP在不重新發(fā)布版本的情況下修復(fù)線上的bug溉委。支持Android 2.3 到 6.0鹃唯,并且支持arm 與 X86系統(tǒng)架構(gòu)的設(shè)備。完美支持Dalvik與ART的Runtime瓣喊,補(bǔ)丁文件是以 .apatch 結(jié)尾的文件坡慌。
3.Nuwa 基于類加載器ClassLoder加載desk,它的基礎(chǔ)是desk分包的基礎(chǔ)上藻三。
三洪橘,熱更新原理
1.Android類加載機(jī)制
*1 PathClassLoader 用于加載系統(tǒng)的類和應(yīng)用類
*2 DexClassLoader 用于加載dex文件,jar文件jar包等等棵帽。用DexClassLoader加載文件的
2.熱修復(fù)機(jī)制
*1 dexElements數(shù)組熄求。
*2 ClassLoader會(huì)遍歷這個(gè)數(shù)組。
然后根據(jù)crash定位逗概,導(dǎo)到對(duì)應(yīng)的類文件弟晚,然后把這個(gè)類文件打包成dex文件,修改這個(gè)類以后把這個(gè)dex文件打包放到dexElements數(shù)組最前面逾苫,然后再通過類加載器去加載的時(shí)候卿城,他就不會(huì)加載到處于后面的dex文件,這樣就完成了整個(gè)熱修復(fù)的過程铅搓。