安卓之美Android开发Android开发经验谈

Android 增量更新 (二)更新流程

2017-06-19  本文已影响203人  kuwork

接上一节的内容,通过使用 Bsdiff 可以成功实现拆分和合并了。这个时候就要想一下如何完成整个更新的过程。

必须想清楚的问题

这个时候要注意不再是增量拆分,而是如何平滑得实现应用的更新。

界面设计

目前在用的系统也是由这个雏形发展而来,而我现在并不在负责这个部分的编码,这里公布部分界面以及逻辑原理。


提交新版本过程

版本提交流程

接口设计

检查更新接口拥有4个请求参数,如下

参数名 参数描述
productId 产品ID
versionCode 当前版本号
type 版本类型
oldsha1code 当前版本的校验码

返回参数:

参数名 参数描述
name 产品ID
updateType 更新类型有三种,inc(增量)、full(完整)、noupdate(无更新)
versionCode 最新版本号
versionName 最新版本名
size long类型,更新包大小
sizeOriginal 在增量更新有效时,表示最新包大小
newSHA 最新包的SHA1校验码
increaseSHA 补丁包的SHA1校验码
url 下载链接
updateList 更新信息

在系统中,版本37的SHA1 是 bbc3be08...4f72f41,最新版本是39,SHA1是d53eca....46474811f,从37到39的补丁包的SHA1 是56efbfce....8628。
1)情况一 :可能当前版本和最新版本不存在补丁包,也可能是当前版本的检验码与服务器记录不符,要求完整更新
参数:

productId:b6d9f85e...64ef
versionCode:37
type:official
oldsha1code:1c5cae2551....964fcab

接口结果:

{
    "code": 1000,
    "updateInfo": {
        "name": "b6d9f85e...64ef",
        "updateType": "full",
        "versionCode": 39,
        "versionName": "1.3.3",
        "size": 20185438,
        "newSHA": "d53eca....46474811f",
        "url": "http://xxx.com/files/d53/d53ec/xxxx_1.3.3_39.apk",
        "updateList": [
            {
                "versionCode": 39,
                "versionName": "1.3.3",
                "updateContent": "1.【新增】优化月租续期缴费,新增自然月续期\n2.【优化】优化附近车场列表加载速度\n3.【优化】优化修复车位申请异常信息提示\n我们始终努力改善您的体验,提高稳定性以及性能优化"
            },
            {
                "versionCode": 38,
                "versionName": "1.3.2",
                "updateContent": "1.【新增】预约车位增加车库位置信息和线路导航;\r\n2.【新增】车场列表新增地区选择和条件排序;\r\n3.【优化】优化附近车场信息和显示;\r\n4.【优化】优化月租到期续费;\r\n我们始终努力改善您的体验,提高稳定性以及性能优化。"
            }
        ]
    }
}

2) 情况二:增量更新
请求参数:

productId:b6d9f85e...64ef
versionCode:37
type:official
oldsha1code:bbc3be08...4f72f41

接口结果:

{
    "code": 1000,
    "updateInfo": {
        "name": "b6d9f85e...64ef",
        "updateType": "inc",
        "versionCode": 39,
        "versionName": "1.3.3",
        "size": 4049580,
        "sizeOriginal": 20185438,
        "newSHA": "d53eca....46474811f",
        "increaseSHA": "56efbfce....8628",
        "url": "http://xxx.com/files/d53/d53ec/xxxx_37_39.patch",
        "updateList": [
            {
                "versionCode": 39,
                "versionName": "1.3.3",
                "updateContent": "1.【新增】优化月租续期缴费,新增自然月续期\n2.【优化】优化附近车场列表加载速度\n3.【优化】优化修复车位申请异常信息提示\n我们始终努力改善您的体验,提高稳定性以及性能优化"
            },
            {
                "versionCode": 38,
                "versionName": "1.3.2",
                "updateContent": "1.【新增】预约车位增加车库位置信息和线路导航;\r\n2.【新增】车场列表新增地区选择和条件排序;\r\n3.【优化】优化附近车场信息和显示;\r\n4.【优化】优化月租到期续费;\r\n我们始终努力改善您的体验,提高稳定性以及性能优化。"
            }
        ]
    }
}

3)情况三:无更新,有两种原因触发,一是最新版本检查更新时出现,也可能是测试版本出现版本号比发布系统上的新。
请求参数:

productId:b6d9f85e...64ef
versionCode:39
type:official
oldsha1code:d53eca....46474811f

接口结果:

{
    "code": 1000,
    "updateInfo": {
        "name": "b6d9f85e...64ef",
        "updateType": "noupdate"
    }
}

注意:不要在同一文件夹下存放过多文件,会导致磁盘查找缓慢。可以利用像上面的方式利用SHA1来分散存储。

服务器这边的情况大致就是这样了,这个只要和后台开发说明白了,很快就能完成,这个接口除了黑盒测试之外,需要仔细过一遍白盒测试,如果存在潜在的问题,会在往后的发布过程中暴露出来,导致严重的更新事故。

第三部分本来想写APP的更新过程的,细想一下,这些年我换了几种网络框架,大致的逻辑也没什么变化,唯有网络框架变化导致代码重构。除非有迫切的原因,这个部分暂时不会写了。

上一篇 下一篇

猜你喜欢

热点阅读