《android基於andFix的熱修復方案》思路篇

1:需求背景

項目上線以後,發現BUG須要修復(好比安卓兼容性等測試難以發現的問題),頻繁的更新影響用戶體驗android

2:方案要求

靜默下載,耗費流量少,打完補丁後馬上生效,不用重啓apksql

3:解決思路

3.1:使用andfix,打出差別包,使用補丁的方式安裝
3.2:缺陷:只能支持源碼級別函數的修改(全局變量、新增、刪除方法都是無效的)安全

4:修復BUG、建立差別包步驟

基於andfix原理,每次版本更新後,以前版本打的熱修復補丁都會失效,這也符合咱們上圖的修復步驟。函數

由於每次熱修復的修改,都會被合併到下個版本中了測試

5:APK熱修復打補丁流程

補充描述:

1:服務端補丁包字段以下:

  • patchId: 補丁包的惟一標識md5值,用於客戶端校驗補丁包合法性,以及本地記錄該補丁包是否已經打過
  • url:下載地址

2:客戶端打包記錄表:

使用sqlLite記錄每次打包的結果,用於避免重複打包,字段以下:url

  • patchId:同上文
  • isSuccess: 打包是否成功

3:apk版本號

咱們目前使用VersionCode做爲版本號spa

 

6:常見問題

1:後臺靜默下載熱修復補丁,會不會耗費流量?

通常而言,每次熱修復補丁的體積僅爲4KB左右,僅涵蓋兩個版本差別部分線程

2:andfix兼容性怎麼樣?

目前試驗了oppo、小米、魅族、moto、nexus,涵蓋android 4.0~6.0;blog

僅在oppo上發現了打補丁包會出現閃退的狀況,可是再次進入,發現補丁包已經生效了md5

把打補丁這個過程放到子線程以後,oppo崩潰的狀況沒再出現

3:android 6.0權限問題會影響到熱修復嗎?

會。由於下載補丁須要涉及到讀取和寫入外置存儲設備權限,固然了,你也能夠把補丁包放置在內部存儲設備上避免這個問題

 4:下載的補丁包刪除了,會使得補丁失效嗎?

不會,只要打成功了,就永久可用了。只有apk版本升級以後,纔會使以前打上的補丁包失效

5: 用不一樣的祕鑰打出來的熱修復包可使用嗎?

不能夠,andFix源碼裏面有對修復包攜帶的祕鑰信息進行判斷,安全性很高。

相關文章
相關標籤/搜索