服务器热修复,热修复探究,hotfix,patch
常見場景App打包發出后
1.忘了關掉Log輸出了
2.存在一個業務邏輯觸發必崩潰
3.某個本地圖標忘了替換成新的
遇到這些問題,若是Web站點,Mobile站點問題都不大,因為這些具有“持續發布”的特長,但是App的特點是“版本發布”,每個版本需要打包,上傳到應用市場,經過審核后,發布。這一些過程,3-7天不等。另外更新頻率過快,用戶體驗也不好。另外若沒有實現增量更新,App的包又比較大,還有一點,需要緊急修復的一般也沒有多少功能,所以用戶會比較反感。
那么如何有效解決這些問題呢?熱修復
熱修復幾個屬性如下
價值:線上問題第一時間能夠被修復
特點:App無需發版,用戶無感知,體積小,靈活
本質:打補丁
可以看到兩個痛點都被解決了1.無需發版2.用戶無感知
看到后有點小激動了,來看熱修復示意圖:
從示意圖可以看到,重點有三個問題
1.服務器端需要下發和管理補丁,并提供安全傳輸部署工作
2.客戶端App下載補丁,并處理
3.補丁的編寫
后面說如何針對這三個問題解決
熱修復目前iOS與Android平臺均支持
iOS主流推薦:
JPatch官方提供支持后臺,但要嵌入SDK
若使用GitHub上開源實現,需要自己處理及維護后臺
補丁主要技術:使用JavaScript調用任何Objective-C的原生接口,替換任意Objective-C原生方法
2.阿里百川
http://baichuan.taobao.com/?spm=a3c0d.7629140.1998907816.1.G9itXC官方文檔
官方提供支持后臺,同樣需要嵌入SDK
補丁主要技術:1.JavaScript
3.lua腳本支持多目錄多文件
Android主流推薦
Native,代表有阿里的Dexposed、HotFix、AndFix與騰訊的內部方案KKFix;
Java,代表有Qzone的超級補丁、大眾點評的nuwa、百度金融的rocooFix,餓了么的amigo以及美團的robust,微信Tinker
1.支付寶AndFixhttps://github.com/alibaba/AndFixGithub
不提供支持后臺,需要嵌入SDK
技術核心:底層采用native hook的方式,這套方案直接使用dalvik_replaceMethod替換class中方法的實現
特點:無需重啟應用,直接生效
缺點:只支持原有方法上修改,不能增加方法,成員變量等等
2.QZone超級補丁
核心技術:通過classLoader替換項目中的類
缺點:補丁包很大,運行性能受到影響,啟動變慢
不提供支持后臺
3.微信Tinker
方案來源gradle編譯的instant run與buck編譯的exopackage
核心技術:dex替換
優點:解決幾乎所有場景
需要考慮的缺點:
1.7.6內核之后Tinker不再支持加固的動態更新? 。另外 小問題? 2. 補丁通過輪詢方式獲取,需要自己集成Push 達到下發補丁功能 :通知客戶端,客戶端調用Tinker主動獲取補丁方法? 3. 無法達到,不重啟APP的情況下的熱修復
提供后臺? tinkerpatch.com
4.美團Robust
原理:Robust是為每個函數都插入了一段邏輯,為每個class插入了ChangeQuickRedirect的字段
缺點:復雜,增加包體積
不提供支持后臺
5阿里百川HotFix
官方文檔
http://baichuan.taobao.com/?spm=a3c0d.7629140.1998907816.1.G9itXC特點:目前1.4最新版,預計17年2月之前發版2.0
1.4采用Java方式替換方法,解決業務場景較少。2.0會解決幾乎所有場景
有官方支持后臺
下面我們對比一下這些熱修復方案
琳瑯滿目,方案眾多
選擇建議:
優先選擇提供補丁管理,維護,下發的友好后臺,會幫助開發者解決諸多小問題
優先選擇該項目持續維護,保證出現問題第一時間能夠解決
總結
以上是生活随笔為你收集整理的服务器热修复,热修复探究,hotfix,patch的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java integer 包_java之
- 下一篇: 虎贲计算机二级视频解析百度云,详解虎贲T