Android 增量更新 (二)更新流程

接上一節的內容,通過使用 Bsdiff 可以成功實現拆分和合并了。這個時候就要想一下如何完成整個更新的過程。

必須想清楚的問題

這個時候要注意不再是增量拆分,而是如何平滑得實現應用的更新。

  • 優先級問題
    當檢查更新時,存在最新版本的補丁時,優先使用增量更新;如若沒有,采用完整更新。
  • 拆分次數問題
    隨著版本不斷迭代,由于 Bsdiff 的拆分效能低,不能也沒必要做到每個新版本提供以前所有版本的補丁。
    試想一下,一個版本越久遠越是可能與新版本存在較大差異,補丁包大小逐漸接近完整包大小,再者,App隨著apk的Size也隨之增加,拆分所需的時間、空間也隨之增大,發布新版本的處理時間越來越長,增量更新的優勢不復存在了,這是不能接受的。
    在更新版本的時候給予設置向前比較次數,我以3個月為期,對于每月更新的APP可以設為3次。
  • 唯一性問題
    通常情況下,APP 的版本標識是 包名或者是 application id ,版本號,版本號,我則增加一個類型屬性,可以理解為渠道名,這是為了解決一些現實的問題,同一APP給不同客戶群體使用,例如測試人員和正式用戶,測試人員可以收到內部快速迭代的更新包,而不會影響到正式用戶,這樣可以給特定用戶群開放不同的版本功能,并且能夠實現階段性切換產品線。
  • 完整性檢驗
    通過SHA1校驗碼確認合并前后文件都是一致的,保障合并的成功率
  • 級聯刪除
    可以單獨刪除補丁包數據,相應版本只支持完整更新了;刪除完整包數據,就要附帶刪除所有相關的補丁包數據,避免導致更新系統混亂。

界面設計

目前在用的系統也是由這個雛形發展而來,而我現在并不在負責這個部分的編碼,這里公布部分界面以及邏輯原理。


    1. 產品管理
      這里的產品管理是以移動產品為標準劃分。
      產品ID:自動UUID,在各個系統模塊中通用,這里僅用于更新模塊,也可用于廣告投放模塊。
      產品名稱: 必填
      產品說明:一個公司里面可能存在很多類似的產品,用于區分細節。
      包名:如果上傳的是APK包,則和應用市場類似,可以不填,自動獲取第一次上傳的application id ,以后通過新增版本頁面上傳是會對比這個參數,不符合就會上傳失敗,避免腦抽了,出現嚴重的問題。
      云端下載:自身系統的帶寬有限,通過把包放到阿里云或者七牛等地方,減低帶寬壓力。
  • 2)版本管理
    如圖所示。這里會在完整包信息之間插入補丁包信息。補丁包信息必須先于版本信息入庫,避免出現查詢異常。
    產品名稱:必選
    版本類型:必選
    包名:自動獲取,產品存在包名,將會進行對比,否則記入產品信息中。
    版本名:給普通用戶查看的版本信息(字符串)。
    版本號:int類型,用于升級的版本信息,新上傳的版本號必須大于上一版本。
    備注:填入升級信息。
    向前對比版本數量:月更新產品,建議設為3次,意思是向上對比不多于3個版本號;周更新產品自己酌情處理。
    SHA1:當前文件的SHA1校驗碼。
    舊版本SHA1:之前版本的完整包校驗碼,用于更新查詢接口。

提交新版本過程

版本提交流程

接口設計

檢查更新接口擁有4個請求參數,如下

參數名 參數描述
productId 產品ID
versionCode 當前版本號
type 版本類型
oldsha1code 當前版本的校驗碼

返回參數:

參數名 參數描述
name 產品ID
updateType 更新類型有三種,inc(增量)、full(完整)、noupdate(無更新)
versionCode 最新版本號
versionName 最新版本名
size long類型,更新包大小
sizeOriginal 在增量更新有效時,表示最新包大小
newSHA 最新包的SHA1校驗碼
increaseSHA 補丁包的SHA1校驗碼
url 下載鏈接
updateList 更新信息

在系統中,版本37的SHA1 是 bbc3be08...4f72f41,最新版本是39,SHA1是d53eca....46474811f,從37到39的補丁包的SHA1 是56efbfce....8628。
1)情況一 :可能當前版本和最新版本不存在補丁包,也可能是當前版本的檢驗碼與服務器記錄不符,要求完整更新
參數:

productId:b6d9f85e...64ef
versionCode:37
type:official
oldsha1code:1c5cae2551....964fcab

接口結果:

{
    "code": 1000,
    "updateInfo": {
        "name": "b6d9f85e...64ef",
        "updateType": "full",
        "versionCode": 39,
        "versionName": "1.3.3",
        "size": 20185438,
        "newSHA": "d53eca....46474811f",
        "url": "http://xxx.com/files/d53/d53ec/xxxx_1.3.3_39.apk",
        "updateList": [
            {
                "versionCode": 39,
                "versionName": "1.3.3",
                "updateContent": "1.【新增】優化月租續期繳費,新增自然月續期\n2.【優化】優化附近車場列表加載速度\n3.【優化】優化修復車位申請異常信息提示\n我們始終努力改善您的體驗,提高穩定性以及性能優化"
            },
            {
                "versionCode": 38,
                "versionName": "1.3.2",
                "updateContent": "1.【新增】預約車位增加車庫位置信息和線路導航;\r\n2.【新增】車場列表新增地區選擇和條件排序;\r\n3.【優化】優化附近車場信息和顯示;\r\n4.【優化】優化月租到期續費;\r\n我們始終努力改善您的體驗,提高穩定性以及性能優化。"
            }
        ]
    }
}

2) 情況二:增量更新
請求參數:

productId:b6d9f85e...64ef
versionCode:37
type:official
oldsha1code:bbc3be08...4f72f41

接口結果:

{
    "code": 1000,
    "updateInfo": {
        "name": "b6d9f85e...64ef",
        "updateType": "inc",
        "versionCode": 39,
        "versionName": "1.3.3",
        "size": 4049580,
        "sizeOriginal": 20185438,
        "newSHA": "d53eca....46474811f",
        "increaseSHA": "56efbfce....8628",
        "url": "http://xxx.com/files/d53/d53ec/xxxx_37_39.patch",
        "updateList": [
            {
                "versionCode": 39,
                "versionName": "1.3.3",
                "updateContent": "1.【新增】優化月租續期繳費,新增自然月續期\n2.【優化】優化附近車場列表加載速度\n3.【優化】優化修復車位申請異常信息提示\n我們始終努力改善您的體驗,提高穩定性以及性能優化"
            },
            {
                "versionCode": 38,
                "versionName": "1.3.2",
                "updateContent": "1.【新增】預約車位增加車庫位置信息和線路導航;\r\n2.【新增】車場列表新增地區選擇和條件排序;\r\n3.【優化】優化附近車場信息和顯示;\r\n4.【優化】優化月租到期續費;\r\n我們始終努力改善您的體驗,提高穩定性以及性能優化。"
            }
        ]
    }
}

3)情況三:無更新,有兩種原因觸發,一是最新版本檢查更新時出現,也可能是測試版本出現版本號比發布系統上的新。
請求參數:

productId:b6d9f85e...64ef
versionCode:39
type:official
oldsha1code:d53eca....46474811f

接口結果:

{
    "code": 1000,
    "updateInfo": {
        "name": "b6d9f85e...64ef",
        "updateType": "noupdate"
    }
}

注意:不要在同一文件夾下存放過多文件,會導致磁盤查找緩慢。可以利用像上面的方式利用SHA1來分散存儲。

服務器這邊的情況大致就是這樣了,這個只要和后臺開發說明白了,很快就能完成,這個接口除了黑盒測試之外,需要仔細過一遍白盒測試,如果存在潛在的問題,會在往后的發布過程中暴露出來,導致嚴重的更新事故。

第三部分本來想寫APP的更新過程的,細想一下,這些年我換了幾種網絡框架,大致的邏輯也沒什么變化,唯有網絡框架變化導致代碼重構。除非有迫切的原因,這個部分暫時不會寫了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容