瞎写:Tinker_imitator微信热更新方案

这里只记录本人对此方案的理解,以及根据自己实际情况对此方案的后续改进和想法,全是瞎写。
Tinker_imitator是微信热更新方案实现, 由zzz40500大神提供的方案 源码地址Tinker_imitator 原理篇

根据作者提供的步骤操作开始一切顺利,但是打包patch时使用插件提示no version can be fix,无法生成补丁包,目前不知道zzz40500修复没

图patch

用jd-gui看插件部分代码
List<FixApkVersionBean> applicationFacets = getApplicationFacets(anActionEvent.getProject());
的applicationFacets 为null,applicationFacets 为图patch中的相关文件,文件真实存在,为什么会出这个bug我没去过多探究,我采用命令的方式生成patch包(bsdiff的相关命令)。测试可行。
Tinker_imitator中主要就这三个

buildSrc

这个是用于干扰gradle打包,生成patch文件的代码,具体看原理篇里有解释。主要就是用来记录class文件的MD5值,用于比较前后class是否有变化,在生成patch时选择性的生成patch包,如:classes.dex类中有变化,而classes2.dex无变化,只打classes.dex的patch包。

library

用于app加载patch包的代码,这里以后有时间在具体分析。

使用中的一些问题

在实际使用过程中,直接使用两apk里的dex文件就可直接生成patch包,可以根据dex的头文件来判断dex是否一致,并不需要buildSrc,可能作者是有其他考虑,我没有细致看代码,只是看原理篇得出的粗浅结论。

dex头文件结构

根据checksum和siganture就能确定两文件是否相同。

现在可以用其他方式确定哪个dex改变了,可以用bsdiff命令来生成相应patch了。

后续我有时间自己用Java写个工具可以把新旧apk差分成patch。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容