什么是热修复技术? AndFix 框架替换原理和优点...java
当咱们已上线的app出现了很是影响用户使用的紧急Bug,一般状况下须要在第一时间线下修复该bug,而后通过一系列测试验证,最后打渠道包在各大应用市场从新发布升级版本,用户经过下载新包完成Bug修复;git
显然,整个过程很耗时耗力,必定程度上也会影响到用户使用体验,鉴于这种问题存在,热修复框架就产生了。
开发人员只须要针对Bug打出补丁推给用户,用户检测到补丁而后自动拉取,修复Bug;github
对于Bug的处理,咱们不要过于依赖热修复框架,在开发的过程当中仍是要按照标准的流程作好自测、配合测试人员完成测试流程 。
bash
AndFix,全称是Android hot-fix。是阿里开源的一个Android热补丁框架,容许APP在不从新发布版本的状况下修复线上的bug。app
AndFix的原理就是方法的替换,把有bug的方法替换成补丁文件中的方法框架
Andfix在项目中使用过程介绍ide
1. 正常编译打包生成apk文件(带Bug的),例如:old.apk;
2. 修复Bug后打包生成新的apk文件 例如: new.apk ;
3. 利用工程中tools文件夹下apkpatch工具生成 .aptch补丁文件;
复制代码
(a). cd 进入tools文件夹下复制代码
(b). 执行 apkpatch -f <new> -t <old> -o <output> -k <keystore> -p <***> -a <alias> -e <***>复制代码
-o <output> : 输出目录
-k <keystore>: 打包所用的keystore
-p <password>: keystore的密码
-a <alias>: keystore 用户别名
-e <alias password>: keystore 用户别名密码
-f <new.apk> :新版本
-t <old.apk> : 旧版本
复制代码
将生成的.apkpatch文件 手动上传到服务端
(详细操做暂无)函数
1. 检测补丁包接口 ;
复制代码
在程序初始化时请求接口,检测服务端补丁信息
工具
无补丁:继续初始化框架 <div class="md-section-divider"></div>复制代码
有补丁:执行以下2操做 复制代码
2. 补丁包下载接口 ;
复制代码
下载补丁文件
测试
拉取失败:下次程序进入从新校验补丁包,并下载 复制代码
拉取成功: 执行以下3操做 复制代码
3. 解压缩 ;
复制代码
1.对压缩包进行解压 复制代码
2.校验合法性(文件类型,长度,验证补丁文件的签名,验证优化文件的指纹等)复制代码
4. 解密 ;
复制代码
解密压缩包 复制代码
添加补丁 patchManager . addPatch(路径)复制代码
patchManager . loadPatch()复制代码
补丁加载一般是在应用程序的初始化阶段(例如Application.onCreate());
1.补丁下载到相应目录
2.经过loadPatch方法加载
3.会将补丁复制到app的目录里面,而后下载补丁的文件会被删除
4.若是versionName改变了,将会删除apatch里面全部的补丁。
复制代码
-printmapping proguard.map 首先须要生成mapping文件记录混淆规则,以后能够把printmapping 这句话注释掉,每次只使用applymapping。
-applymapping proguard.map (而后在下面加上) 复制代码
-keepclass*extendsjava.lang.annotation.Annotation 复制代码
-keepclasseswithmembernamesclass*{native ;} 复制代码
-keepclasscom.alipay.euler.andfix.**{ *; } 复制代码
没法添加新类和新字段
没法替换构造函数和Application的onCreate方法
没法动态加入新功能模块,有别于dex的替换