天天看點

基于配置系統和流水線的熱更新方案

文章目錄

      • 背景
      • 方案調研
      • 具體方案
      • 方案優缺點

背景

最近我們要在一個新的 App 上增加熱更新的能力,按照以往的設計思路,需要背景一起參與,并提供對應的接口,具體的接口如下:

接口 參數 傳回值 備注
uploadBasePkg appVersion:App版本号;baseFile:基礎封包件 上傳基礎包,釋出流水線打包之後自動上傳
uploadUpdatePkg appVersion:要釋出到的App版本;hotVersion:熱更新版本号;updateFile:熱更包 上傳熱更包,上傳完成之後,需要與指定的基礎包和該基礎包的曆史熱更包生成diff檔案
requestUpdate appVersion:本地的App版本号;hotVersion:本地的熱更新版本号;uin:使用者id;platForm:系統(Android,iOS) hasUpdate:true/false;updateFile:熱更新檔案下載下傳位址;md5:校驗;fileLength:檔案長度;msg:熱更新說明;HotVersion:熱更新版本号;versionType:更新類型(1靜默,2推薦,3強制) 請求熱更新,若有,則傳回熱更新配置,若無,則hasUpdate傳回false

相當于是把 diff 的計算放在背景,然後每次用戶端請求背景去擷取到對應的 diff 包,并在本地進行合并,就完成了一次熱更新。可以參考:

Cocos熱更新的非官方解決方案

這是個很好的解決方案,但是背景同學的工作量比較大,而目前背景的人力又比較緊張,是以在綜合考量需求和現狀之後,我們決定使用配置系統+流水線的方案來實作熱更新的能力。

方案調研

目前我們 App 已經擁有配置系統的能力,可以根據系統,使用者id,版本号等參數下發不同的配置,而熱更新就是需要基于這些參數去擷取到不同的 diff 包。

而生成 diff 包的能力,我們可以放到流水線上去執行,生成的産物自動上傳到 cos,然後擷取到下載下傳連結,并組合成配置。我們拿到這個配置之後,就可以根據我們的需要,将其釋出到對應的版本或者使用者上了。

具體方案

流水線的流程如下圖所示:

基于配置系統和流水線的熱更新方案

我們每次打包完,都需要将舊包儲存。在生成 diff 包的流水線上,我們隻需要輸入更新分支,便可以生成 diff 包。diff 包包含兩部分,分别是old.zip 和 new.zip 的差分檔案,以及 update.manifest 檔案,這個檔案包含了 new.zip 的全部檔案及其對應的 md5 值,可用于合并校驗。

手機端的流程如下圖所示:

基于配置系統和流水線的熱更新方案

其中,檢查熱更新是直接從配置系統擷取最新的配置,然後和本地的熱更新版本号進行對比,若配置系統的版本号高于本地的版本号,則需要進行熱更新。

方案優缺點

優點 缺點
簡單,不需要背景的介入 依賴于配置系統的能力,比較難實作一些個性化的需求;需要在流水線上進行一些開發