線上熱修復技術
阿新 • • 發佈:2017-05-07
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
線上熱修復技術