方案
使用腾讯的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安装流程:
测试
热更新必要验证流程:
至少要验证的版本:
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.a