安卓熱修復之——大搜集

以下內容均爲轉載,轉自 wave_1102 的Android熱修復技術鏈接收集

熱修復準備
安卓App熱補丁動態修復技術介紹 QQ空間團隊

Android dex分包方案 開源中國

原理分析
Android 熱補丁動態修復框架小結 鴻洋_

Android熱更新實現原理 大頭鬼Bruce

熱修復庫
https://github.com/dodola/HotFix dodola

https://github.com/jasonross/Nuwa 寒江不釣

https://github.com/bunnyblue/DroidFix BunnyBlue

From: http://www.open-open.com/lib/view/open1453255423901.html


Android 熱補丁和熱修復

參考:

各大熱補丁方案分析和比較

Android App 線上熱修復方案

  1. Xposed

Github地址:https://github.com/rovo89/Xposed

項目描述:Xposed框架使用起來很確實很好用。可是就是有一個巨大的缺點,就是需要Root權限。

Xposed源碼剖析——概述

  1. Dexposed

Github地址:https://github.com/alibaba/dexposed

阿里巴巴(淘寶團隊),基於ROOT社區著名開源項目Xposed改造剝離了ROOT部分,實現的一個Android平臺上功能強大的無侵入式運行時AOP框架。(基於Xposed改造剝離了ROOT部分)

項目描述:http://www.aplesson.com/?p=925 無需Root也能Hook?——Depoxsed框架演示

支持從Android2.3到4.4(除了3.0)的所有dalvid運行時arm架構的設備,暫不支持5.0系統,可以針對5.0以上版本進行修復。

使用:Android-HotPatch在線熱補丁方案

  1. AndFix

Github地址:https://github.com/alibaba/AndFix

項目描述:阿里巴巴(支付寶團隊)開源的 Android 應用熱修復工具,幫助 Anroid 開發者修復應用的線上問題。

AndFix 支持 Android 2.3 - 6.0,ARM 和 x86 架構,完美支持dalvik 運行時和 art 運行時。AndFix 的分支是 .apatch 文件。

使用方法:http://www.bkjia.com/Androidjc/1055390.html

  1. AndroidPatchUpdate

Github地址:https://github.com/JackCho/AndroidPatchUpdate

項目描述:類似Google I/O 上提及的 Smart App update,應用增量更新機制,利用了Linux上的Patch打補丁的方法,將舊項目和新項目進行差別對比(使用bsdiff或者Courgette工具)生成patch文件,然後使用bspatch將舊項目與Patch進行合併

  1. HotFix

Github地址:https://github.com/dodola/HotFix

項目描述:該項目是基於QQ空間終端開發團隊的技術文章:安卓App熱補丁動態修復技術介紹 實現的一個動態打補丁的框架。

該框架完成了作者所描述的基本功能。

項目部分代碼從 dalvik_patch 項目中修改而來,這個項目本來是用來實現multidex加載的,修改後可以用來實現熱補丁的效果。

  1. ClassLoader

Github地址:

項目描述:騰訊空間Android工程師,陳鍾發明的熱補丁方案,是他在看源碼的時候偶然發現的切入點。

我們知道,multidex方案的實現,其實就是把多個dex放進app的classloader之中,從而使得所有dex的類都能被找到。

而實際上findClass的過程中,如果出現了重複的類,參照下面的類加載的實現,是會使用第一個找到的類的。

該熱補丁方案就是從這一點出發,只要把有問題的類修復後,放到一個單獨的dex,通過反射插入到dexElements數組的最前面,不就可以讓虛擬機加載到打完補丁的class了嗎。

說到此處,似乎已經是一個完整的方案了。

但在實踐中,會發現運行加載類的時候報preverified錯。

原來在DexPrepare.cpp,將dex轉化成odex的過程中,會在DexVerify.cpp進行校驗,驗證如果直接引用到的類和clazz是否在同一個dex,如果是,則會打上CLASS_ISPREVERIFIED標誌。

通過在所有類(Application除外,當時還沒加載自定義類的代碼)的構造函數插入一個對在單獨的dex的類的引用,就可以解決這個問題。空間使用了javaassist進行編譯時字節碼插入。

注意:ClassLoader方案支持2.3-6.0,會對啓動速度略微有影響,只能在下一次應用啓動時生效,在空間中已經有了較長時間的線上應用,如果可以接受在下次啓動才應用補丁,是很好的選擇。

地址:安卓App熱補丁動態修復技術介紹(qq空間技術團隊)

  1. 基於Proxy/Delegate 實現bug熱修復

地址:Android 基於Proxy/Delegate 實現bug熱修復

Android拆分與加載Dex的多種方案對比

From: http://www.cnblogs.com/CharlesGrant/p/4950093.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章