《android基于andFix的热修复方案》思路篇
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源码里面有对修复包携带的秘钥信息进行判断,安全性很高。
分类:
Android
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?