android热修复平台架构方案

热修复基于阿里的andfix实现,在原更新平台上添加新功能模块来实现。

1、系统结构


(1)整体结构

保持不变


(2)WebConsole结构

WebConsole添加热修复模块:

热修复模块

选择应用,上传热修复包并设定版本。


2、 服务端流程


(1)在WebConsole选择应用,上传热修复包并设定版本。将应用及版本信息和文件路径保存至DB,将热修复包保存至FS。

(2)客户端请求Server,传入客户端的包名、版本等信息。Server根据应用和版本在DB中查询热修复包路径返回。

流程比较简单,先验证请求,通过再跟进版本查询热修复包路径返回即可。

验证请求:主要验证客户端的请求参数。首先验证参数齐全切不为空,否则为无效请求;然后通过包名和签名SHA1(忽略大小写) 判断是否为官方应用,非官方应用不允许更新,返回非官方错误码。



3、交互协议


Request:

{

   "appKey":"xxx"

   "pkgName": "com.xxx.xxx",

   "versionCode": 1,

   "signedSHA1": "xx:xx:xx:xx:xx"

}

其中:

appkey是唯一标示,用于区分不同的更新,比如同一个app的测试和正式包,可以将appKey分别设置“xxx”“xxx-测试”,这样就可以各自进行各自的更新,互不影响。

signedSHA1的校验注意忽略大小写;


Response:

{

    "msgCode": 1,

    "msg": "已是最新",

    "data": {

        "pkgName": "com.xxx.xxx",

        "signedSHA1": "xx:xx:xx:xx:xx",

        "versionCode": 2,

        "fileSize": 123143,

        "md5": "xxxxxxx",

        "patchUrl": "http://www.xxx.xxx/xx.apk"

    }

}

其中patchUrl就是热修复包的地址。

msgCode-msg:

0-此版本有热修复包

1-此版本无热修复包

2-热修复包请求失败,请重试。

3-非官方应用,请卸载后到官网下载安装。



4、客户端流程


热修复客户端流程

(1)非官方应用:弹出不可关闭的提示弹窗,提示用户卸载当前应用,去官网下载官方版本。

(2)下载校验:校验文件的大小、md5,保证文件的合法性正确性。如果校验失败则删除已下载文件。

推荐阅读更多精彩内容