《android基于andFix的热修复方案》思路篇
2016-04-19 20:22
295 查看
1:需求背景
项目上线之后,发现BUG需要修复(比如安卓兼容性等测试难以发现的问题),频繁的更新影响用户体验2:方案要求
静默下载,耗费流量少,打完补丁后立刻生效,不用重启apk3:解决思路
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源码里面有对修复包携带的秘钥信息进行判断,安全性很高。相关文章推荐
- android开发 用线程进行耗时操作,统一处理 第二版
- Android官方开发文档Training系列课程中文版:调用相机之控制相机
- so汉化心得
- 关于 Android 进程保活,你所需要知道的一切
- android学习(隐藏菜单栏)
- android:AutoCompleteTextView和MultAutoCompleteTextView的简单使用
- 完美解决Android SDK Manager无法更新
- Android API之android.net.wifi.ScanResult
- [随手记]Android Studio 上引用Google APIs SDK
- android之baseAdapter实现listview里控件点击和左滑收藏(个人感觉已完美解决)
- androidstudio 问题
- 一些优秀的开源库汇总(间间断断更新O(∩_∩)O~)
- Android开发艺术探索(研读笔记)——02-Activity的启动模式
- Android Studio入门到精通
- 广告条目的android代码,常使用
- android SQLite(安卓数据库的插入显示删除)
- Android控件之CheckBox换图标、焦点问题
- 利用 Travis CI 把 Android 项目部署到 github
- 自定义控件android
- Android——listview android:cacheColorHint,android:listSelector属性作用