项目优化之热更新

方案

使用腾讯的tinker,对于加固的apk360和应用宝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时有值,flag1时为空)

描述

通讯

根据版本号、补丁号、渠道名,确定是否有热更新

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-215.0)机型或其他不支持补丁的手机A、手机B、手机C、手机D

保证验证的流程:

1、市场版本,升级下一个补丁包是否正常(例如5.1.5-520-0升级到5.1.5-520-1

2、某些不支持补丁的手机(手机A),加载补丁包失败后,是否会提醒下载安装apk(例如手机A5.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渠道;

 
原文地址:https://www.cnblogs.com/John-Chen/p/6381799.html