淺析熱修復以及思考

首先得聲明的是熱修復只能在國內市場使用。

而國外的Google Play不允許任何APP有更改,被舉報就準備好下架整改了。


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

所以老老實實在國內用就好了。

市面上出現了許多熱修復,從最早的Dexposed到后來的AndFix,到現在的Tinker各有千秋。

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

以下采取圖片為主的方式介紹,更多詳細原理以及代碼實現請移步參考。

Native流派

1.簡介

使用Nativie流主要有阿里的DexPosed和AndFix。主要是通過解析補丁中的方法,
將需要打補丁的地方在Native層使用C++中指針替換來達到修復bug的目的。

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

2.流程

3.原理

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

總的來說,Native流派是先獲取補丁文件中的信息,通過信息進入Native層Hook需要修復Bug的方法,
然后將補丁中的內容打到需要替換的位置。通過這樣的方式來實現熱修復。

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

Dex流

1.簡介

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

分包的時候將不同方法分配到不同的dex中,這樣解決了單個dex方法不能超過64k的限制。

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

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

這樣并行開發(fā),互不干擾的模式,大大提高了開發(fā)效率,實現了APK模塊化區(qū)分。

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

2.原理

基于android的dexClassLoader機制,將需要替換的dex放在dexElements數組最前面。

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

大概意思和插隊差不多,把最新的好的放在最前面,老舊的錯誤的將它淘汰。

如需詳細的解析介紹請移步參考中的[QQ空間熱修復實現]查看詳細實現原理。

后話

其實從熱修復里面可以看到一點:線上有bug更新一次是在是太麻煩了,不停打包和分發(fā),實在是太繁瑣。熱修復這種折中的方式應運而生。

換句話來說,現在APP太重了。

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

輕量化一個方向就是將APP功能拆分,模塊化開發(fā)。近似生活中,手機零件由不同工廠生產,然后再由一個工廠統(tǒng)一組裝,這樣大大提高了生產效率。

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

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

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

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

這樣有幾點好處:

  • 加強開發(fā)效率,模糊化Native和Web會給開發(fā)人員帶來便利。
  • 方便用戶,提高整個Android端的用戶體驗。
  • 壟斷市場,制定規(guī)則,站在整個Android流量的上游。

反正上面都是我猜的

至于一些缺點,比如技術實現啊什么的,反正還有苦逼的程序員來實現。

[手動滑稽]

參考

參考內容來自大腿們的詳細介紹,如有侵權請告知刪除

  1. QQ空間熱修復實現

  2. AndFix原理

  3. 干貨干貨

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容