Android熱修復技術簡介

目錄

寫在前面

一、熱修復簡介

1.1、什麼是熱修復

1.2、熱修復有哪些好處

1.3、熱修復===萬事大吉?

二、熱修復常見技術方案對比

2.1、方案介紹

2.2、實現套路

2.3、技術對比

2.4、技術選型

2.5、關於自建熱修復


寫在前面

今天是千年難得一遇的2020520(怎麼樣這個顏色喜歡嗎? ),這麼好的日子你表白了嗎?Sorry,忘記問了

Just kidding!下面步入正題,今天繼續來做《熱修復和插件化》專欄的分享,之前這個專欄按照知識的層級已經陸續寫了三篇:

《class文件與dex文件解析》

《帶你認識JVM》

《帶你認識ClassLoader》

今天是第四篇,內容上是準備對動態加載技術最常見的使用場景Android的熱修復技術作一個簡單的介紹,主要都是一些概念性的東西,先有個基本瞭解,下一篇再具體的去介紹技術上的實現,OK,話不多說,開始!

一、熱修復簡介

1.1、什麼是熱修復

看名字相信大家也能猜出來了,熱修復就是動態的去修復或者更新APP的行爲,有時候也可以稱爲動態更新,其實都是一個意思。

1.2、熱修復有哪些好處

在過去我們做應用開發時,當用戶下載安裝了我們的APP之後,如果APP產生了BUG,或者有些行爲想要改變時,我們只能通過重新發佈一個版本,讓用戶覆蓋安裝才能解決相對應的問題,其實思考下來你會發現,這個過程它的成本還是比較高的。一批牛逼的開發者就開始思考有沒有什麼方案能夠解決這樣一個尷尬的場景,於是乎,熱修復橫空出世了,它可以讓用戶沒有任何的感知就可以完成BUG的修復或者一些行爲的更改,這也是它最核心的價值體現。

1.3、熱修復===萬事大吉?

其實啊,熱修復對於我們來說只是一種亡羊補牢的手段,不到萬不得已也不會去使用的,在企業中實際上發佈熱修復版本和發佈正式版都是一樣的節奏,也需要測試完全測試通過,而且市面上現有的熱修復框架都有一定的兼容性問題,所以我們首先應該保證高質量的版本發佈,熱修復只是作爲一種輔助手段,不要對其有任何的依賴心理,做好本身才是最好!

二、熱修復常見技術方案對比

2.1、方案介紹

當前市面上流行的熱修復方案主要是分爲阿里系和騰訊系,當然也有其它一些大廠開源出來的方案,主要有以下幾種:

  •  QQ空間的超級補丁方案
  • 微信的Tinker
  • 阿里系:手淘Dexposed,支付寶AndFix,阿里百川HotFix,手淘技術團隊聯合阿里雲Sophix
  • 美團的Robust,餓了麼的migo,百度的hotfix......

2.2、實現套路

實現套路                                                              描述                方案代表
底層替換 這種方案有很大的限制,不過時效性好,即時生效 阿里系:AndFix、Sophix
類加載 這種方案限制較少,修復範圍廣,不過時效性差,需要重新冷啓動才能見效 騰訊系:QZone、Tinker

2.3、技術對比

方案對比 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存在穩定性與兼容性問題,並且無法實現類替換,只能用作BUG修復
  • Robust兼容性與成功率較高,但是同樣無法新增類和變量,只能用作BUG修復
  • QZone雖然可以做到發佈產品功能,但是存在性能問題,並且補丁包較大
  • Tinker支持類、SO、資源替換,既可以修復BUG又可以發佈產品功能,並且還運行在微信龐大的用戶設備上

綜合以上對比分析,更加推薦使用Tinker,因爲它的功能相對來說是最齊全的。

2.4、技術選型

  • 理清需求是什麼,因爲需求是否能夠滿足纔是衡量一切的標準,技術就像女朋友,沒有好壞只有適合與不適合
  • 能滿足需求的條件下,衡量學習成本的高低
  • 學習成本一樣的情況下,優先選擇大公司的方案(有專門的技術團隊維護相應的方案,並且久經市場考驗)

綜合以上考慮,我會在這個專欄裏介紹兩種方案的實現,一是較爲簡單的AndFix,二是較爲複雜的Tinker,簡單的和複雜的都瞭解一下,可以對熱修復建立起一個更好的技術棧。

2.5、關於自建熱修復

我在學習熱修復這塊的知識的時候,也在網上看了很多的文章,我發現有些文章教了大家如何手寫熱修復框架,在這裏簡單談幾點自己的思考和看法吧:

  • 對於手寫熱修復框架當然是持推薦和鼓勵的態度,如果你能夠自己動手寫一套熱修復的框架,對開發者本身還是有很大的收穫的,首先你會對熱修復技術的實現原理有一個更好的認識,從底層到應用層建立起自己的一套清晰完整的知識體系,對於市面上的開源方案你肯定也能夠做到舉一反三,在自己的項目中更加容易集成和使用。
  • 不推薦重複造輪子,當然如果你能造出更好的輪子,前面那句話當我沒說。
  • 市面上流行的熱修復方案都是大廠專門的技術團隊在開發維護的,首先他們的整體技術實力肯定是毋庸置疑的,其次這些方案一般都應用在自己的產品體系中,都是經歷了市場上持久的考驗,技術方案本身已經是相當成熟的,對於集成後產生的問題也基本上都能找到相對應的解決方案,實在沒有你也可以到對應的社區或者官網上提問尋求答案。所以對於公司的企業級項目來說穩定性肯定是要有的,所以使用自建的方案能否保證穩定性,這個問題可能你得好好考慮一下。

今天的內容就到這裏吧,不打擾各位約會了!總的來說就是對熱修復技術做一個整體的介紹,下一篇就來把AndFix集成到項目中進行具體的使用,OK,咱們下期再會吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章