1. 程式人生 > >android--------微信 Tinker 熱修復 (一)

android--------微信 Tinker 熱修復 (一)

什麼是熱修復

熱修復補丁(hotfix),又稱為patch,指能夠修復軟體漏洞的一些程式碼,是一種快速、低成本修復產品軟體版本缺陷的方式。

熱修復有多種,如:Tinker ,QZone,Andfix, InstantRun,SO庫熱修復等,這兩天學習了一下微信的Tinker,並用到專案中試了一下,感覺還不錯,

有空總結了一下,特來分享給大家,希望對各位有幫助。

Tinker是微信官方的Android熱補丁解決方案,它支援動態下發程式碼、So庫以及資源,讓應用能夠在不需要重新安裝的情況下實現更新。當然,你也可以使用Tinker來更新你的外掛。

它主要包括以下幾個部分:

  1. gradle編譯外掛: tinker-patch-gradle-plugin
  2. 核心sdk庫: tinker-android-lib
  3. 非gradle編譯使用者的命令列版本: tinker-patch-cli.jar

為什麼使用Tinker

當前市面的熱補丁方案有很多,其中比較出名的有阿里的AndFix、美團的Robust以及QZone的超級補丁方案。但它們都存在無法解決的問題,這也是正是我們推出Tinker的原因。

TinkerQZoneAndFixRobust
類替換yesyesnono
So替換yesnonono
資源替換yesyesnono
全平臺支援yesyesyesyes
即時生效nonoyesyes
效能損耗較小較大較小較小
補丁包大小較小較大一般一般
開發透明yesyesnono
複雜度較低較低複雜複雜
gradle支援yesnonono
Rom體積較大較小較小較小
成功率較高較高一般最高

總的來說:

  1. AndFix作為native解決方案,首先面臨的是穩定性與相容性問題,更重要的是它無法實現類替換,它是需要大量額外的開發成本的;
  2. Robust相容性與成功率較高,但是它與AndFix一樣,無法新增變數與類只能用做的bugFix方案;
  3. Qzone方案可以做到釋出產品功能,但是它主要問題是插樁帶來Dalvik的效能問題,以及為了解決Art下記憶體地址問題而導致補丁包急速增大的。

特別是在Android N之後,由於混合編譯的inline策略修改,對於市面上的各種方案都不太容易解決。而Tinker熱補丁方案不僅支援類、So以及資源的替換,它還是2.X-8.X(1.9.0以上支援8.X

)的全平臺支援。利用Tinker我們不僅可以用做bugfix,甚至可以替代功能的釋出。Tinker已執行在微信的數億Android裝置上,那麼為什麼你不使用Tinker呢?

Tinker的已知問題

由於原理與系統限制,Tinker有以下已知問題:

  1. Tinker不支援修改AndroidManifest.xml,Tinker不支援新增四大元件(1.9.0支援新增非export的Activity);
  2. 由於Google Play的開發者條款限制,不建議在GP渠道動態更新程式碼;
  3. 在Android N上,補丁對應用啟動時間有輕微的影響;
  4. 不支援部分三星android-21機型,載入補丁時會主動丟擲"TinkerRuntimeException:checkDexInstall failed"
  5. 對於資源替換,不支援修改remoteView。例如transition動畫,notification icon以及桌面圖示。