常見場景App打包發(fā)出后
1.忘了關(guān)掉Log輸出了
2.存在一個業(yè)務(wù)邏輯觸發(fā)必崩潰
3.某個本地圖標(biāo)忘了替換成新的
遇到這些問題诚纸,若是Web站點,Mobile站點問題都不大,因為這些具有“持續(xù)發(fā)布”的特長胸懈,但是App的特點是“版本發(fā)布”,每個版本需要打包恰响,上傳到應(yīng)用市場趣钱,經(jīng)過審核后,發(fā)布胚宦。這一些過程首有,3-7天不等。另外更新頻率過快枢劝,用戶體驗也不好井联。另外若沒有實現(xiàn)增量更新,App的包又比較大您旁,還有一點烙常,需要緊急修復(fù)的一般也沒有多少功能,所以用戶會比較反感鹤盒。
那么如何有效解決這些問題呢蚕脏?熱修復(fù)
熱修復(fù)幾個屬性如下
價值:線上問題第一時間能夠被修復(fù)
特點:App無需發(fā)版,用戶無感知侦锯,體積小驼鞭,靈活
本質(zhì):打補(bǔ)丁
可以看到兩個痛點都被解決了1.無需發(fā)版2.用戶無感知
看到后有點小激動了,來看熱修復(fù)示意圖:
從示意圖可以看到尺碰,重點有三個問題
1.服務(wù)器端需要下發(fā)和管理補(bǔ)丁挣棕,并提供安全傳輸部署工作
2.客戶端App下載補(bǔ)丁汇竭,并處理
3.補(bǔ)丁的編寫
后面說如何針對這三個問題解決
熱修復(fù)目前iOS與Android平臺均支持
iOS主流推薦:
1.JPatchhttp://jspatch.com/官網(wǎng)
https://github.com/bang590/JSPatchGithub開源地址
JPatch官方提供支持后臺,但要嵌入SDK
若使用GitHub上開源實現(xiàn)穴张,需要自己處理及維護(hù)后臺
補(bǔ)丁主要技術(shù):使用JavaScript調(diào)用任何Objective-C的原生接口,替換任意Objective-C原生方法
2.阿里百川
http://baichuan.taobao.com/?spm=a3c0d.7629140.1998907816.1.G9itXC官方文檔
官方提供支持后臺两曼,同樣需要嵌入SDK
補(bǔ)丁主要技術(shù):1.JavaScript
3.lua腳本支持多目錄多文件
Android主流推薦
Native皂甘,代表有阿里的Dexposed、HotFix悼凑、AndFix與騰訊的內(nèi)部方案KKFix偿枕;
Java,代表有Qzone的超級補(bǔ)丁、大眾點評的nuwa户辫、百度金融的rocooFix,餓了么的amigo以及美團(tuán)的robust,微信Tinker
1.支付寶AndFixhttps://github.com/alibaba/AndFixGithub
不提供支持后臺渐夸,需要嵌入SDK
技術(shù)核心:底層采用native hook的方式,這套方案直接使用dalvik_replaceMethod替換class中方法的實現(xiàn)
特點:無需重啟應(yīng)用渔欢,直接生效
缺點:只支持原有方法上修改墓塌,不能增加方法,成員變量等等
2.QZone超級補(bǔ)丁
官方原理文檔https://zhuanlan.zhihu.com/p/20308548?columnSlug=magilu
核心技術(shù):通過classLoader替換項目中的類
缺點:補(bǔ)丁包很大奥额,運(yùn)行性能受到影響苫幢,啟動變慢
不提供支持后臺
3.微信Tinker
文檔https://www.diycode.cc/topics/321
方案來源gradle編譯的instant run與buck編譯的exopackage
核心技術(shù):dex替換
優(yōu)點:解決幾乎所有場景
需要考慮的缺點:
1.7.6內(nèi)核之后Tinker不再支持加固的動態(tài)更新? 。另外 小問題? 2. 補(bǔ)丁通過輪詢方式獲取,需要自己集成Push 達(dá)到下發(fā)補(bǔ)丁功能 :通知客戶端垫挨,客戶端調(diào)用Tinker主動獲取補(bǔ)丁方法? 3. 無法達(dá)到韩肝,不重啟APP的情況下的熱修復(fù)
提供后臺? tinkerpatch.com
4.美團(tuán)Robust
官方文檔http://tech.meituan.com/android_robust.html
原理:Robust是為每個函數(shù)都插入了一段邏輯,為每個class插入了ChangeQuickRedirect的字段
缺點:復(fù)雜九榔,增加包體積
不提供支持后臺
5阿里百川HotFix
官方文檔
http://baichuan.taobao.com/?spm=a3c0d.7629140.1998907816.1.G9itXC特點:目前1.4最新版哀峻,預(yù)計17年2月之前發(fā)版2.0
1.4采用Java方式替換方法,解決業(yè)務(wù)場景較少哲泊。2.0會解決幾乎所有場景
有官方支持后臺
下面我們對比一下這些熱修復(fù)方案
琳瑯滿目剩蟀,方案眾多
選擇建議:
優(yōu)先選擇提供補(bǔ)丁管理,維護(hù)攻旦,下發(fā)的友好后臺喻旷,會幫助開發(fā)者解決諸多小問題
優(yōu)先選擇該項目持續(xù)維護(hù),保證出現(xiàn)問題第一時間能夠解決