zoukankan      html  css  js  c++  java
  • 项目优化之热更新

    方案

    使用腾讯的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渠道;

     
  • 相关阅读:
    [原创] 毕设---在myeclipes中安装Hadoop开发插件
    [转]Linux下RPM软件包的安装及卸载 yum操作
    [转]结构化、半结构化和非结构化数据
    [转]这5种必知的大数据处理框架技术
    [转]浅谈Hive vs. HBase 区别在哪里
    前端资源整理
    每个程序员都应该知道的10大基础算法
    Python Day14(HTML)
    Python Day13(yaml)
    Python Day12(补充)
  • 原文地址:https://www.cnblogs.com/John-Chen/p/6381799.html
Copyright © 2011-2022 走看看