APP技術之熱補丁與增量更新

5 評論 7573 瀏覽 52 收藏 7 分鐘

熱補丁與增量更新技術在APP中是比較常見的,作為移動端產品的產品經理,應該對這些技術有一些大致的了解。

熱補丁技術

定義

熱補丁修復技術可以做到線上推送一段修補 BUG 的代碼,終端無需更新版本直接運行,可以做到在用戶無感知的情況下,修復問題

該技術避免了當App發布之后,突然發現bug需要進行緊急修復時需要完成的重新打包App、測試、向各個應用市場和渠道換包、提示用戶升級、用戶下載、覆蓋安裝等一系列復雜的操作。

原理

Android

熱補丁修復技術基于的是android dex分包方案。我們都知道andriod的安裝文件是APK文件,APK文件中包含了軟件的信息(版本號等)、dex文件(就是程序員的代碼)、res文件夾(設計師的文件,包括切圖、動效等)。

那么為什么dex分包呢?當一個APP的功能越來越復雜,代碼量越來越多時程序的編譯會出現錯誤,會出現APK文件無法安裝的情況。出現這些問題主要是因為一個dex文件最多只支持65536個方法,如果一個復雜的APP全部寫在一個dex文件中,肯定會超載。所以要對dex進行分包,dex文件就是代碼的集合。

熱補丁原理,簡單的概括一下,就是把多個dex文件塞入到APP的Classloader(通過這個類來實現dex的分包,大家都知道什么叫類吧~)之中。每個dex文件是一個對象,多個dex文件排列成一個有序的數組,當程序執行的時候,會按順序遍歷dex文件,然后從當前遍歷的dex文件中找相應功能的類,如果找則返回,如果找不到從下一個dex文件繼續查找。

那么這樣的話,可以在這個數組中的第一個元素放置格式為.jar的文件,里面包含修復過功能的類,這樣的話,當程序遍歷的時候,修復過功能的類就會被率先查找到,從而替代有bug的類。

原理如下圖:

iOS

iOS主要是使用JSPatch來實現熱補丁修復,在項目中引入JSPathc,然后在發現bug時下發JS腳本補丁,替換原生方法,以此實現無需更新APP即時修復bug。

主要實現流程:當客戶端出現bug時,iOS開發人員需要開發一段JS腳本用于修復bug,腳本開發完成后,服務端開發人員根據iOS開發人員提供的JS腳本部進行一定的安全策略部署服務端腳本,iOS客戶端通過腳本版本檢測接口,判斷是否需要下載JS腳本,下載腳本成功后,進行加載,運行,進而修復APP的bug。

APP端流程如下:

其中,客戶端與服務端在獲取JS腳本時會進行安全校驗,防止過程中被攻擊替換代碼,安全校驗的簡單流程:a.服務端對JS腳本文件生成一個MD5(文件的唯一標識)值并加密——b.將加密的MD5值與JS腳本傳給客戶端——c.客戶端對拿到的腳本文件計算MD5值,且對加密的MD5值進行解密——d.客戶端對比計算出的MD5值與解密后的MD5值——e.兩個MD5數值相等則通過校驗。

熱補丁技術不僅可以用來修復bug打補丁,還可以在線更新代碼添加新需求哦!

增量更新技術

定義

增量更新是指在進行更新操作時,只更新需要改變的地方,不需要更新或者已經更新過的地方則不會重復更新。也就是,只將App中有發生改變的部分發送給用戶,而不是每次都重新下載一個完整的安裝包。

原理

  1. 生成差異包。將 App 的最新安裝包(V2)與歷史發布版本的安裝包(V1)進行差分對比,得到一個差異包(V2-V1)。
  2. 下發差異包。當某個老版本(V1)的 App 開始檢查更新的時候,需要將自己當前的版本信息發送給服務端,然后服務端判斷后,選擇對應的差異包(V2-V1)下發。
  3. 合成新包。
  4. 校驗完整性。校驗當前歷史包的Hash值以及差異包的Hash(哈希值是一段數據唯一的數值表示形式)值,合成新包后,也要校驗新包的Hash值,只有這三個Hash值都與預期匹配,才可以確認新包是完整的。

增量更新的注意點:

  • 增量更新是以兩個應用版本之間的差異來生成補丁的,無法保證用戶每次及時升級到最新,所以必須對所發布的每一個版本都和最新的版本作差分,以使所有版本的用戶都可以差分升級,這樣操作較為繁瑣,不過可以通過腳本批量生成。
  • 增量更新成功的前提是,用戶手機端必須有能夠被拷貝出來且與服務器用于差分的版本一致的APK文件,這樣就會造成一些情況,例如,系統內置的APK無法獲取到,則無法進行增量更新。

以上,就是對熱補丁修復技術與增量更新技術的小總結,希望對大家能有所幫助。

 

作者:流年,互聯網產品設計師,4年互聯網產品設計經驗。

本文由 @流年 原創發布于人人都是產品經理。未經許可,禁止轉載。

題圖來自unsplash,基于CC0協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. ios端,開發是上傳差異包,還是合成新包后發送新包給蘋果?差異包的大小是蘋果官方計算的還是開發給出的

    來自浙江 回復
  2. 非技術出身產品經理的技術溝通秘籍!15天補齊程序/代碼、前端、后端、數據庫4大模塊基礎技術知識。
    詳情戳>http://996.pm/7daXE 或咨詢起點學院蘑菇(wx:qdxymg)

    來自廣東 回復
  3. 有個問題,JSPatch的熱更已被蘋果禁止,直接拒包

    來自廣東 回復
    1. 游戲是可以的吧

      來自浙江 回復
  4. 有個問題,雖然APP版本不變,那么對于終端來講,Hotfix的補丁包還是要網絡請求下載的吧

    來自四川 回復