1. 程式人生 > >線上熱修復技術

線上熱修復技術

images sse idt classes lib 反射 png 兩個 logs

沒學會、沒接觸的時候感覺很難,學會了也就沒那麽難

1.前言

技術分享

技術分享

2.相關技術

  • 阿裏巴巴 AndFix、Dexposed
  • QQ空間 超級補丁

  • 微信 Tinker

(一)AndFix與hotFix技術

AndFix不同於QQ空間超級補丁技術和微信Tinker通過增加或替換整個DEX的方案,提供了一種運行時在Native修改Filed指針的方式,實現方法的替換,達到即時生效無需重啟,對應用無性能消耗的目的。

技術分享

(二) 超級補丁

超級補丁技術基於DEX分包方案,使用了多DEX加載的原理,大致的過程就是:把BUG方法修復以後,放到一個單獨的DEX裏,插入到dexElements數組的最前面,讓虛擬機去加載修復完後的方法。

修復的步驟為:

1. 通過獲取到當前應用的Classloader,即為BaseDexClassloader

2. 通過反射獲取到他的DexPathList屬性對象pathList

3. 通過反射調用pathList的dexElements方法把patch.dex轉化為Element[]

4. 兩個Element[]進行合並,把patch.dex放到最前面去

5. 加載Element[],達到修復目的

(三) Tinker

微信針對QQ空間超級補丁技術的不足提出了一個提供DEX差量包,整體替換DEX的方案。主要的原理是與QQ空間超級補丁技術基本相同,區別在於不再將patch.dex增加到elements數組中,而是差量的方式給出patch.dex,然後將patch.dex與應用的classes.dex合並,然後整體替換掉舊的DEX文件,以達到修復的目的

技術分享

參考博客http://www.cnblogs.com/alibaichuan/p/5863616.html

線上熱修復技術