淺析熱修復(fù)以及思考

首先得聲明的是熱修復(fù)只能在國內(nèi)市場使用幻件。

而國外的Google Play不允許任何APP有更改跷叉,被舉報(bào)就準(zhǔn)備好下架整改了嫌吠。


An app downloaded from Google Play may not modify, replace, or update
itself using any method other than Google Play's update mechanism.

所以老老實(shí)實(shí)在國內(nèi)用就好了忌警。

市面上出現(xiàn)了許多熱修復(fù)搁拙,從最早的Dexposed到后來的AndFix,到現(xiàn)在的Tinker各有千秋法绵。

不過大概的分兩種箕速,一種是基于Dexposed和AndFix的Native流和基于Tinker的Dex流。

以下采取圖片為主的方式介紹朋譬,更多詳細(xì)原理以及代碼實(shí)現(xiàn)請移步參考盐茎。

Native流派

1.簡介

使用Nativie流主要有阿里的DexPosed和AndFix。主要是通過解析補(bǔ)丁中的方法徙赢,
將需要打補(bǔ)丁的地方在Native層使用C++中指針替換來達(dá)到修復(fù)bug的目的字柠。

下面以AndFix作為例子簡單介紹原理

2.流程

3.原理

<img src="http://upload-images.jianshu.io/upload_images/2241150-0d92931d7c0d3080?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240">

總的來說探越,Native流派是先獲取補(bǔ)丁文件中的信息,通過信息進(jìn)入Native層Hook需要修復(fù)Bug的方法窑业,
然后將補(bǔ)丁中的內(nèi)容打到需要替換的位置钦幔。通過這樣的方式來實(shí)現(xiàn)熱修復(fù)。

詳細(xì)介紹以及代碼分析請移步到參考[AndFix原理]

Dex流

1.簡介

Dex流的原理其實(shí)和解決64k方法限制方法類似常柄,主要還是在dex加載上面做文章鲤氢。

分包的時候?qū)⒉煌椒ǚ峙涞讲煌膁ex中,這樣解決了單個dex方法不能超過64k的限制西潘。

插件化開發(fā)也是基于這種理念誕生的卷玉。

不同的dex由不同部門開發(fā),然后由統(tǒng)一的apk進(jìn)行加載秸架。

這樣并行開發(fā)揍庄,互不干擾的模式咆蒿,大大提高了開發(fā)效率东抹,實(shí)現(xiàn)了APK模塊化區(qū)分。

而最近的Tinker沃测,原理本質(zhì)上是一樣的缭黔,但是基于這些采取了很多優(yōu)化,更加穩(wěn)定蒂破。

2.原理

基于android的dexClassLoader機(jī)制馏谨,將需要替換的dex放在dexElements數(shù)組最前面。

當(dāng)系統(tǒng)遍歷方法的時候會優(yōu)先使用前面的方法(補(bǔ)丁方法)附迷,來替代原來的方法惧互。

大概意思和插隊(duì)差不多,把最新的好的放在最前面喇伯,老舊的錯誤的將它淘汰喊儡。

如需詳細(xì)的解析介紹請移步參考中的[QQ空間熱修復(fù)實(shí)現(xiàn)]查看詳細(xì)實(shí)現(xiàn)原理。

后話

其實(shí)從熱修復(fù)里面可以看到一點(diǎn):線上有bug更新一次是在是太麻煩了稻据,不停打包和分發(fā)艾猜,實(shí)在是太繁瑣。熱修復(fù)這種折中的方式應(yīng)運(yùn)而生捻悯。

換句話來說匆赃,現(xiàn)在APP太重了。

每次迭代都要去用戶去應(yīng)用市場下載今缚,這對于用戶來說是個麻煩事算柳,所以APP輕量化是一個以后發(fā)展的方向。

輕量化一個方向就是將APP功能拆分姓言,模塊化開發(fā)埠居。近似生活中查牌,手機(jī)零件由不同工廠生產(chǎn),然后再由一個工廠統(tǒng)一組裝滥壕,這樣大大提高了生產(chǎn)效率纸颜。

我認(rèn)為模塊化必定是以后的發(fā)展方向,從google新的Android Instant Apps就可以看出來绎橘。今后可以通過Deep Link的方式胁孙,從一段url中可以鏈接到一個應(yīng)用的某個模塊,迎來輕量化革命称鳞。

現(xiàn)在開發(fā)模式采用Native+Web混合模式歸根結(jié)底也是為了減輕APP重量涮较,滿足快速迭代的要求。

Android Instant APP和Progressive Web App也是Google推出模糊Native和Web的界限冈止,找到一個既有Native良好體驗(yàn),也有Web APP快速迭代的方案熙暴。

而且從筆者翻譯的【譯】Android 7.0 for Developers
里面的第16點(diǎn)來說闺属,Google目前在持續(xù)性的迭代Chrome以及WebView,我猜測這些新的功能和Chrome的聯(lián)系將會非常密切周霉,甚至可能會將Chrome抬到和Google Play相同的地位來成為Web端的控制者掂器。這樣不但會提高chrome的市場份額,也變相壟斷了整個APP和Web俱箱。

這樣有幾點(diǎn)好處:

  • 加強(qiáng)開發(fā)效率国瓮,模糊化Native和Web會給開發(fā)人員帶來便利。
  • 方便用戶狞谱,提高整個Android端的用戶體驗(yàn)乃摹。
  • 壟斷市場,制定規(guī)則跟衅,站在整個Android流量的上游孵睬。

反正上面都是我猜的

至于一些缺點(diǎn),比如技術(shù)實(shí)現(xiàn)啊什么的与斤,反正還有苦逼的程序員來實(shí)現(xiàn)肪康。

[手動滑稽]

參考

參考內(nèi)容來自大腿們的詳細(xì)介紹,如有侵權(quán)請告知刪除

  1. QQ空間熱修復(fù)實(shí)現(xiàn)

  2. AndFix原理

  3. 干貨干貨

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撩穿,一起剝皮案震驚了整個濱河市磷支,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌食寡,老刑警劉巖雾狈,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抵皱,居然都是意外死亡善榛,警方通過查閱死者的電腦和手機(jī)辩蛋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來移盆,“玉大人悼院,你說我怎么就攤上這事≈溲” “怎么了据途?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長叙甸。 經(jīng)常有香客問我颖医,道長,這世上最難降的妖魔是什么裆蒸? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任熔萧,我火速辦了婚禮,結(jié)果婚禮上僚祷,老公的妹妹穿的比我還像新娘佛致。我一直安慰自己,他們只是感情好久妆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布晌杰。 她就那樣靜靜地躺著跷睦,像睡著了一般筷弦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抑诸,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天烂琴,我揣著相機(jī)與錄音,去河邊找鬼蜕乡。 笑死奸绷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的层玲。 我是一名探鬼主播号醉,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辛块!你這毒婦竟也來了畔派?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤润绵,失蹤者是張志新(化名)和其女友劉穎线椰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尘盼,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡憨愉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年烦绳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片配紫。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡径密,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出躺孝,到底是詐尸還是另有隱情睹晒,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布括细,位于F島的核電站伪很,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏奋单。R本人自食惡果不足惜锉试,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望览濒。 院中可真熱鬧呆盖,春花似錦、人聲如沸贷笛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乏苦。三九已至株扛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汇荐,已是汗流浹背洞就。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掀淘,地道東北人旬蟋。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像革娄,于是被迫代替她去往敵國和親倾贰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容