方案
使用騰訊的tinker,對於加固的apk(360和應用寶2個渠道)不支持
不加固的apk:
1、支持熱更新的手機
使用熱更新方案自動下載加載補丁包,無需安裝,共用一個補丁包
2、不支持熱更新的手機
檢測到加載補丁失敗,提醒用戶下載對應渠道新的完整apk,重新安裝
加固的apk:
提醒用戶下載對應渠道新的完整apk,重新安裝
Web
為了保證不支持熱更新的手機,也能升級修復bug,並保證版本號不變,所以每次熱更新,后台都必選管理所有渠道的apk,也即每次熱更新都必須提供所有渠道的apk。
每次更新后台補丁時,都需要提供的文件:
1、通用補丁文件
2、不加固的渠道,所有渠道的apk文件(為了保證不支持熱更新的手機,也能通過下載完整apk的方式升級)
3、加固的渠道,所有渠道的apk文件(加固的apk不支持熱更新)
重點:
所有渠道的apk文件,都要有!!!
通訊
新增checkPatchVersion接口(新增,檢測並獲取最新版本補丁信息)
URL |
http://helper.2bulu.com/product/checkPatchVersion |
參數 |
String channel 渠道(必須) Integer version 當前軟件版本號(必須) Integer patchVersion 當前補丁版本號(必須) String deviceName 設備型號 String sdkLevel 系統版本 |
返回值 |
Integer flag:1-是最新補丁,0-不是最新補丁 PatchInfo info:最新版本補丁信息(當flag=0時有值,flag為1時為空) |
描述 |
通訊: 根據版本號、補丁號、渠道名,確定是否有熱更新 1、如果是加固的渠道,只返回apk信息 2、如果是非加固渠道,返回補丁和apk信息 終端: if(info.patchFileId > 0){ //有補丁文件返回,下載補丁文件,彈窗提醒用戶,已經下載完成補丁,需要重啟加載 //加載拋異常就是不支持熱更新,然后彈窗提醒用戶下載apk安裝更新補丁 }else{ //沒有補丁文件 if(info.apkFileId > 0){ //彈窗提醒用戶下載apk安裝更新補丁 } } |
PatchInfo 補丁信息:
patchVersion |
Integer |
補丁版本號 |
version |
Integer |
版本號 |
versionName |
String |
版本名稱(如V5.0.2) |
channel |
String |
渠道 |
description |
String |
補丁描述 |
releaseTime |
Long |
發布時間 |
|
|
|
patchFileId |
Long |
補丁文件下載id,如果沒有返回0 |
patchFileSize |
Long |
補丁文件大小(單位:Byte),如果沒有返回0 |
patchMd5Code |
String |
補丁文件MD5文件校驗碼 |
apkFileId |
Long |
apk補丁文件下載id,如果沒有返回0 |
apkFileSize |
Long |
apk補丁文件大小(單位:Byte),如果沒有返回0 |
apkMd5Code |
String |
apk補丁文件MD5文件校驗碼 |
終端
代碼邏輯:
完整流程:
手機重新運行 讀取緩存的PatchInfo ,檢測是否有對應當前版本的補丁文件(文件名稱需要包含版本號-補丁號,補丁文件的補丁號需要>程序讀取到的補丁號,不要已經通過apk的方式安裝補丁了還走加載補丁的流程) 1、有補丁文件,加載補丁文件(需要捕獲異常) 1.1 加載成功 進入“檢測市場版本流程” 1.2 加載失敗 根據PatchInfo里面的apk信息,進入“下載apk安裝流程”
2、沒有補丁文件 進入“檢測市場版本流程” |
檢測市場版本流程:
此流程是程序啟動都必須走一遍的 先通過checkApkVersion,獲取是否有市場版本升級 1.1 如果有市場版本升級 通過getUpgradeApkInfo獲取具體升級信息,提醒下載升級市場版本 1.1.1 選擇下載更新,進入“下載apk安裝流程” 1.1.2 選擇忽略當前版本,進入“檢測補丁文件流程” 1.2 如果沒有市場版本升級 進入“檢測補丁文件流程” |
檢測補丁文件流程:
通過checkPatchVersion獲取是否有熱更新,如果flag==0(不是最新補丁), if(info.patchFileId > 0){ //有補丁文件返回,下載補丁文件,彈窗提醒用戶,補丁已經下載完成,修復了哪些問題,需要重啟加載 }else{ //沒有補丁文件 if(info.apkFileId > 0){ //進入“下載apk安裝流程” } } |
下載apk安裝流程:
彈窗提醒用戶下載apk安裝更新補丁 ...... |
測試
熱更新必要驗證流程:
至少要驗證的版本:
5.1.5-520-0(市場版本)
准備文件:
5.1.5-520-0-baidu7.apk(不加固)、5.1.5-520-0-36012.apk(加固)
5.1.5-520-1(熱更新版本)
准備文件:
通用補丁包、5.1.5-520-1-baidu7.apk(不加固)、5.1.5-520-1-36012.apk(加固)
5.1.5-520-2(熱更新版本)
准備文件:
通用補丁包、5.1.5-520-2-baidu7.apk(不加固)、5.1.5-520-2-36012.apk(加固)
5.1.6-530-2(市場版本)
准備文件:
5.1.6-530-2-baidu7.apk(不加固)、5.1.6-530-2-36012.apk(加固)
准備手機:
三星android-21(5.0)機型或其他不支持補丁的手機A、手機B、手機C、手機D
保證驗證的流程:
1、市場版本,升級下一個補丁包是否正常(例如5.1.5-520-0升級到5.1.5-520-1)
2、某些不支持補丁的手機(手機A),加載補丁包失敗后,是否會提醒下載安裝apk(例如手機A從5.1.5-520-0升級到5.1.5-520-1,加載插件失敗,應該提醒下載apk並安裝)
3、補丁版本,升級下一個補丁版本是否正常(例如5.1.5-520-1升級到5.1.5-520-2)
4、某些不支持補丁的手機(手機A),apk升級到補丁版本之后,再升級下一個補丁版本是否正常(例如手機A通過apk升級到5.1.5-520-1后,是否能正常升級到5.1.5-520-2)
5、熱更新版本,是否能正常升級到下一個市場版本(例如5.1.5-520-2,是否能正常升級到5.1.6-530-2)
6、對於加固的版本,是否能如不支持補丁的手機一樣,提醒下載apk並安裝
手機保證修改:
1、關於戶外助手與幫助里面,顯示版本名-版本號-補丁版本
2、每次發布補丁,至少修改下代碼、布局(這個也不算太重要,要是不支持的也沒辦法了)
測試流程:
1、發布5.1.5-520-0(市場版本)
測試:
手機A安裝baidu7渠道,驗證5.1.5-520-0版本特征及是否是baidu7渠道
手機B安裝baidu7渠道,驗證5.1.5-520-0版本特征及是否是baidu7渠道
手機C安裝baidu7渠道,驗證5.1.5-520-0版本特征及是否是baidu7渠道
手機D安裝36012渠道,驗證5.1.5-520-0版本特征及是否是36012渠道
2、發布5.1.5-520-1(熱更新版本)
測試:
手機A是否能檢測到有更新,並提醒下載補丁apk並安裝,並安裝流程升級到5.1.5-520-1,驗證5.1.5-520-1版本特征及是否是baidu7渠道;
手機B是否能自動加載補丁包然后完成升級,驗證5.1.5-520-1版本特征及是否是baidu7渠道;
手機C是否能自動加載補丁包然后完成升級,驗證5.1.5-520-1版本特征及是否是baidu7渠道(驗證完全手機設置里面殺死進程,不要運行升級到5.1.5-520-2,為了驗證5.1.5-520-1跳過5.1.5-520-2升級到5.1.6-530-2);
手機D是否能檢測到有更新,並提醒下載補丁apk並安裝,並安裝流程升級到5.1.5-520-1,驗證5.1.5-520-1版本特征及是否是36012渠道;
3、發布5.1.5-520-2(熱更新版本)
測試:
手機A是否能檢測到有更新,並提醒下載補丁apk並安裝,並安裝流程升級到5.1.5-520-2,驗證5.1.5-520-2版本特征及是否是baidu7渠道;
手機B是否能自動加載補丁包然后完成升級,驗證5.1.5-520-2版本特征及是否是baidu7渠道;
手機D是否能檢測到有更新,並提醒下載補丁apk並安裝,並安裝流程升級到5.1.5-520-2,驗證5.1.5-520-2版本特征及是否是36012渠道;
4、發布5.1.6-530-2(市場版本)
測試:
手機A是否能檢測到有更新,並提醒下載apk並安裝,並安裝流程升級到5.1.6-530-2,驗證5.1.6-530-2版本特征及是否是baidu7渠道;
手機B是否能檢測到有更新,並提醒下載apk並安裝,並安裝流程升級到5.1.6-530-2,驗證5.1.6-530-2版本特征及是否是baidu7渠道;
手機C是否能檢測到有更新,並提醒下載apk並安裝,並安裝流程升級到5.1.6-530-2,驗證5.1.6-530-2版本特征及是否是baidu7渠道;
手機D是否能檢測到有更新,並提醒下載apk並安裝,並安裝流程升級到5.1.6-530-2,驗證5.1.6-530-2版本特征及是否是36012渠道;