Android 中的热修复

什么热修复?

就是已经发布的APP发现有bug,需要修复(资源修复,代码修复,so库修复),但又不想重新发布安装包,通过让用户下载补丁文件的方式解决。

在这里插入图片描述

热修复的优势

无需重新发布安装包;用户无感知修复,无需下载最新的应用,节省用户流量;修复成功率高,避免线上bug带来的业务损失,把损失降到最低。

热修复中的不足

所有的热修复框架不能保证100%修复成功,只能说bug的修复是相对的,如下图的四个热修复框架都各有所长各有不足:

在这里插入图片描述

比如阿里的AndFix不支持资源文件的替换(包括xml布局,图片,清单文件等),不支持lib替换,不支持类替换,不支持新增类,不支持新增方法,只支持代码上的bug替换!

热修复框架普遍存在一个问题:虽然不用安装新版本的安装包同样可以修复bug,但是如果本地下载好的补丁包被删除了,那么之前bug就会重新!
因为热修复不是合拼生成新的apk,而是动态加载修复bug的那部分代码。
换句话说修复bug的代码是存放在补丁包里的,删除补丁包,修复bug的代码也就不存在了,之前bug也就重新了。

目前市面上主流的热修复框架:

在这里插入图片描述

上图中,冷启动修复就是合成全新的dex文件来替换原有的dex文件(dex文件包含了所有app代码),其作用在于突破热替换方案无法新增类方法的限制,可以更好地达到修复目的。

下面演示阿里巴巴的AndFix集成步骤:
1.在Module的build.gradle添加依赖(如下图)
在这里插入图片描述

2.在Application中集成代码:

在这里插入图片描述

3.在MainActivity的onDestroy()方法把进程杀了

在这里插入图片描述

如何生成补丁文件,供移动端下载
1.打开链接:https://github.com/alibaba/AndFix,下载apkpatch的补丁制作工具,并解压到本地

2.准备两个软件包和一个签名文件keystore(例如:release-key.keystore),一个是线上有问题的软件包(例如:bug.apk),另一个是修复bug的软件包(例如:fix.apk),并一同放在刚才解压的目录下。如下图:

在这里插入图片描述

3.打开Windows命令行工具,进入到解压目录,输入 apkpatch.bat -f fix.apk -t bug.apk -o output -k release-key.keystore -p 123456 -a zhibin -e 000111,然后回车可以看到下图:

在这里插入图片描述

(ps:123456是签名文件keystore的密码,zhibin是签名文件的别名,000111是别名密码。生成的补丁文件是在output文件夹里的,重命名为fixbug.apatch并移动到了同一层,方便截图)

到此阿里巴巴的AndFix热修复框架已集成完,fixbug.apatch上传至服务器,供移动端下载,可以测试热修复功能了!

今天的分享结束了,再见~

猜你喜欢

转载自blog.csdn.net/yanhuomatou2015/article/details/109089413