[Android]AndFix的使用詳解

很久以前就有想了解熱修復(fù)的問題蜂莉,但是很多情況下都缺乏實踐,網(wǎng)上看了很多hook的理論和實踐混卵,近來研究了一番發(fā)現(xiàn)現(xiàn)在比較多使用的是阿里的AndFix映穗,他能兼容android2.3~6.0的熱修復(fù),而且修復(fù)速度非衬凰妫快蚁滋,補(bǔ)丁也非常小,用于修復(fù)緊急性bug是非常有效的赘淮。

AndFix最重要是運(yùn)用到(方法的替換)辕录,有些熱修復(fù)框架是將類替換,有些則替換dex


github地址

1.實現(xiàn)的方法替換



2.實例演示

當(dāng)我們下載了github的demo之后拥知,可以看到demo仲提供了源碼和example

(1)import exmple的工程

(2)加入AndFix的庫

(3)然后我們需要修改MainActivity踏拜,添加一個TextView顯示

(4)然后要生成簽名打包一個apk,然后打包改名為1.apk

(5)修改TextView的文本

(6)編譯打包成新的apk低剔,改名為2.apk

(7)demo里面tools的文件夾里面速梗,有apkpatch的工具

需要使用它做一個補(bǔ)丁包


舊的apk為1.apk,新的apk為2.apk, -o表示補(bǔ)丁的輸出目錄襟齿,-k表示keystore, -p表示keystore的密碼姻锁,-a表示alias, -e表示entry password

然后會成一個.apatch的補(bǔ)丁包

(8)將.apatch的補(bǔ)丁包改名為out.apatch,然后放到手機(jī)的主目錄。

查看一下MainApplication


可以看到MainApplication啟動的時候會加載PatchManager猜欺,然后他會默認(rèn)加載一個out.apatch的補(bǔ)丁文件位隶。

(9)再次進(jìn)入app就會發(fā)現(xiàn)textview會顯示bug fix證明更新是成功的

3.補(bǔ)丁命名的規(guī)則

a_b.apatch

a表示versionCode,b表示當(dāng)前的補(bǔ)丁的版本。

例如:如果當(dāng)前的versionCode的版本為4开皿,補(bǔ)丁的版本為3涧黄,則命名為4_3.apatch。

4.適用性

Andfix并不能修復(fù)所有情況下出現(xiàn)的bug,測試結(jié)果如下:

其中對類得構(gòu)造方法和Application的onCreate方法赋荆,還有的xml綁定方法是不支持的

5.補(bǔ)丁加載的時機(jī)

一般情況下是越早加載越好笋妥,一般在MainApplication啟動的onCreate方法啟動補(bǔ)丁下載,然后調(diào)用pathManager的loadPatch方法

1.可以考慮下下載補(bǔ)丁窄潭,再下一次啟動后加載

2.或者下載補(bǔ)丁春宣,立刻加載,然后會重啟app


6.補(bǔ)丁替換內(nèi)部流程


1.補(bǔ)丁下載到相應(yīng)目錄

2.通過loadPatch方法加載

3.會將補(bǔ)丁復(fù)制到app的目錄里面,然后下載補(bǔ)丁的文件會被刪除

4.如果versionName改變了月帝,將會刪除apatch里面所有的補(bǔ)丁躏惋。


7.混淆

-printmapping proguard.map

首先需要生成mapping文件記錄混淆規(guī)則,之后可以把printmapping 這句話注釋掉嚷辅,每次只使用applymapping簿姨。

-applymapping proguard.map

然后在下面加上

-keepclass*extendsjava.lang.annotation.Annotation

-keepclasseswithmembernamesclass*{native ;}

-keepclasscom.alipay.euler.andfix.**{ *; }


8.局限性

1.無法添加新類和新字段

2.無法替換構(gòu)造函數(shù)和Application的onCreate方法

3.未測試MVVM綁定和注解方法是否可以實現(xiàn)替換。

4.無法動態(tài)加入新功能模塊潦蝇,有別于dex的替換


參考資料

AndFix使用說明

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末款熬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子攘乒,更是在濱河造成了極大的恐慌,老刑警劉巖惋鹅,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件则酝,死亡現(xiàn)場離奇詭異,居然都是意外死亡闰集,警方通過查閱死者的電腦和手機(jī)沽讹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來武鲁,“玉大人爽雄,你說我怎么就攤上這事°迨螅” “怎么了挚瘟?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長饲梭。 經(jīng)常有香客問我乘盖,道長,這世上最難降的妖魔是什么憔涉? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任订框,我火速辦了婚禮,結(jié)果婚禮上兜叨,老公的妹妹穿的比我還像新娘穿扳。我一直安慰自己,他們只是感情好国旷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布矛物。 她就那樣靜靜地躺著,像睡著了一般议街。 火紅的嫁衣襯著肌膚如雪泽谨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機(jī)與錄音吧雹,去河邊找鬼骨杂。 笑死,一個胖子當(dāng)著我的面吹牛雄卷,可吹牛的內(nèi)容都是我干的搓蚪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼丁鹉,長吁一口氣:“原來是場噩夢啊……” “哼妒潭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起揣钦,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤雳灾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后冯凹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谎亩,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年宇姚,在試婚紗的時候發(fā)現(xiàn)自己被綠了匈庭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡浑劳,死狀恐怖阱持,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情魔熏,我是刑警寧澤衷咽,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站道逗,受9級特大地震影響兵罢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜滓窍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一卖词、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吏夯,春花似錦此蜈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至跺嗽,卻和暖如春战授,著一層夾襖步出監(jiān)牢的瞬間页藻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工植兰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留份帐,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓楣导,卻偏偏與公主長得像废境,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子筒繁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評論 2 348

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