android--------微信 Tinker 熱修復 (一)
阿新 • • 發佈:2019-02-01
什麼是熱修復
熱修復補丁(hotfix),又稱為patch,指能夠修復軟體漏洞的一些程式碼,是一種快速、低成本修復產品軟體版本缺陷的方式。
熱修復有多種,如:Tinker ,QZone,Andfix, InstantRun,SO庫熱修復等,這兩天學習了一下微信的Tinker,並用到專案中試了一下,感覺還不錯,
有空總結了一下,特來分享給大家,希望對各位有幫助。
Tinker是微信官方的Android熱補丁解決方案,它支援動態下發程式碼、So庫以及資源,讓應用能夠在不需要重新安裝的情況下實現更新。當然,你也可以使用Tinker來更新你的外掛。
它主要包括以下幾個部分:
- gradle編譯外掛:
tinker-patch-gradle-plugin
- 核心sdk庫:
tinker-android-lib
- 非gradle編譯使用者的命令列版本:
tinker-patch-cli.jar
為什麼使用Tinker
當前市面的熱補丁方案有很多,其中比較出名的有阿里的AndFix、美團的Robust以及QZone的超級補丁方案。但它們都存在無法解決的問題,這也是正是我們推出Tinker的原因。
Tinker | QZone | AndFix | Robust | |
---|---|---|---|---|
類替換 | yes | yes | no | no |
So替換 | yes | no | no | no |
資源替換 | yes | yes | no | no |
全平臺支援 | yes | yes | yes | yes |
即時生效 | no | no | yes | yes |
效能損耗 | 較小 | 較大 | 較小 | 較小 |
補丁包大小 | 較小 | 較大 | 一般 | 一般 |
開發透明 | yes | yes | no | no |
複雜度 | 較低 | 較低 | 複雜 | 複雜 |
gradle支援 | yes | no | no | no |
Rom體積 | 較大 | 較小 | 較小 | 較小 |
成功率 | 較高 | 較高 | 一般 | 最高 |
總的來說:
- AndFix作為native解決方案,首先面臨的是穩定性與相容性問題,更重要的是它無法實現類替換,它是需要大量額外的開發成本的;
- Robust相容性與成功率較高,但是它與AndFix一樣,無法新增變數與類只能用做的bugFix方案;
- Qzone方案可以做到釋出產品功能,但是它主要問題是插樁帶來Dalvik的效能問題,以及為了解決Art下記憶體地址問題而導致補丁包急速增大的。
特別是在Android N之後,由於混合編譯的inline策略修改,對於市面上的各種方案都不太容易解決。而Tinker熱補丁方案不僅支援類、So以及資源的替換,它還是2.X-8.X(1.9.0以上支援8.X
Tinker的已知問題
由於原理與系統限制,Tinker有以下已知問題:
- Tinker不支援修改AndroidManifest.xml,Tinker不支援新增四大元件(1.9.0支援新增非export的Activity);
- 由於Google Play的開發者條款限制,不建議在GP渠道動態更新程式碼;
- 在Android N上,補丁對應用啟動時間有輕微的影響;
- 不支援部分三星android-21機型,載入補丁時會主動丟擲
"TinkerRuntimeException:checkDexInstall failed"
; - 對於資源替換,不支援修改remoteView。例如transition動畫,notification icon以及桌面圖示。