瞎写:Tinker_imitator微信热更新方案

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

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

瞎写:Tinker_imitator微信热更新方案_第1张图片
图patch

用jd-gui看插件部分代码
List 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头文件结构

瞎写:Tinker_imitator微信热更新方案_第2张图片

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

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

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

你可能感兴趣的:(瞎写:Tinker_imitator微信热更新方案)