设为首页 加入收藏

TOP

项目优化之热更新(一)
2017-10-12 18:10:42 】 浏览:7720
Tags:项目 优化 更新

方案

使用腾讯的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.a

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于我 下一篇Android 友盟分享详细集成过程及..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目