Android热补丁修复框架DroidFix使用笔记

来源:互联网 发布:sql server启动的图标 编辑:程序博客网 时间:2024/05/21 13:59

热补丁原理篇:

https://zhuanlan.zhihu.com/p/20308548

热补丁方案比较篇:

http://blog.zhaiyifan.cn/2015/11/20/HotPatchCompare/

DroidFix使用:

地址:https://github.com/bunnyblue/DroidFix

第一步:
结合DroidFix到简理财项目

1、将DroidFix中的AntilazyLoad、droidfixcore、ClassComputer.jar导入到项目中指定位置。

说明:

1.droidfixcore是补丁包的核心包,原理是使用classloader替换.class;

2.AntilazyLoad是为了避免被标记为CLASS_ISPREVERIFIED导致打补丁包出现异常;

3.ClassComputer.jar是比较出修改了哪些类,将修改的类打入补丁包,没修改的不打;详细见上面的原理篇

这里写图片描述

这里写图片描述

2、修改build.gradle的buildTypes,添加proguard-droidfix.pro

说明:

1.由于项目混淆了,混淆后的类记录在mapping文件中,打修复包的时候,利用正式包的mapping文件,这样就使得同一个类再没有改变的情况下两次混淆的结果相同,从而筛选出要修复的类
2.从def userDebugFix=true那一行往下是打包时生成补丁包复制mapping文件,查找差异类使用的

这里写图片描述

这里写图片描述

这里写图片描述

第二步:
下载补丁包、应用补丁包

下载补丁包流程如下

这里写图片描述

每次启动app如果有补丁包则应用补丁包:
这里写图片描述

第三步:

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

说明:

1.模拟打一个线上包,所以用debug,minifyEnable必须为true

2.打完包之后会生成DroidPatch文件夹,里面有两个文件:classes.md5.txt记录class的md5值,mapping.txt记录类的混淆,结合这两个文件才能找出下次打补丁包修改过的类,所以每一个版本都要将上线包的这两个文件保存,打补丁包的时候使用。

3.修复BUG类后,Build Type选择debugDroidFix打包,会在DroidPatch文件夹生成几个文件,其中patch.apk就是我们要的补丁包文件,上传到后台就ok了

优缺点:

优点:

使用简单,纯java编程,屏蔽了底层差异,支持2.3-6.0,无视360加固

缺点:

1、资源文件无法修复

该方案修复的是class,因此无法修复资源文件也就是res文件夹。但可以采取其他方式来解决,比如,对于布局文件,我们可以用java硬编码的方式来实现;对于字符资源,可以直接在代码中硬编码。

2、清单文件AndroidMainfest文件改动无法修复

假如想要添加新的Activity或是Service,无法通过在清单文件中重新注册来实现。这里可以采用注册占坑Activity和Service来解决。

3、自定义Application以及Provider无法修复

Provider由于比应用更早加载到系统中,因此Provider无法修复。自定义的Application,由于安装patch包时,Application已经启动,Application相关的类已经被加载到了系统中,因此需要添加一个代理的Application,将原先Application中的执行逻辑放到代理Application中。

4、应用重新启动生效
由于类只会被加载一次,所以修复包下载之后,重新启动才会生效。

1 0
原创粉丝点击