您的位置:首页 > 移动开发 > Android开发

《android基于andFix的热修复方案》思路篇

2016-04-19 20:22 295 查看

1:需求背景

项目上线之后,发现BUG需要修复(比如安卓兼容性等测试难以发现的问题),频繁的更新影响用户体验

2:方案要求

静默下载,耗费流量少,打完补丁后立刻生效,不用重启apk

3:解决思路

3.1:使用andfix,打出差异包,使用补丁的方式安装
3.2:缺陷:只能支持源码级别函数的修改(全局变量、新增、删除方法都是无效的)

4:修复BUG、创建差异包步骤




基于andfix原理,每次版本更新后,之前版本打的热修复补丁都会失效,这也符合我们上图的修复步骤。

因为每次热修复的修改,都会被合并到下个版本中了


5:APK热修复打补丁流程



补充描述:

1:服务端补丁包字段如下:

patchId: 补丁包的唯一标识md5值,用于客户端校验补丁包合法性,以及本地记录该补丁包是否已经打过

url:下载地址

2:客户端打包记录表:

使用sqlLite记录每次打包的结果,用于避免重复打包,字段如下:

patchId:同上文

isSuccess: 打包是否成功

3:apk版本号

我们目前使用VersionCode作为版本号

6:常见问题

1:后台静默下载热修复补丁,会不会耗费流量?

一般而言,每次热修复补丁的体积仅为4KB左右,仅涵盖两个版本差异部分

2:andfix兼容性怎么样?

目前试验了oppo、小米、魅族、moto、nexus,涵盖android 4.0~6.0;

仅在oppo上发现了打补丁包会出现闪退的情况,但是再次进入,发现补丁包已经生效了

把打补丁这个过程放到子线程之后,oppo崩溃的情况没再出现

3:android 6.0权限问题会影响到热修复吗?

会。因为下载补丁需要涉及到读取和写入外置存储设备权限,当然了,你也可以把补丁包放置在内部存储设备上避免这个问题

4:下载的补丁包删除了,会使得补丁失效吗?

不会,只要打成功了,就永久可用了。只有apk版本升级之后,才会使之前打上的补丁包失效

5: 用不同的秘钥打出来的热修复包可以使用吗?

不可以,andFix源码里面有对修复包携带的秘钥信息进行判断,安全性很高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: