Tinker实现原理剖析:
在上一次解锁Android高阶技能,探秘实战Jetpack<十三>-------Android消息机制与虚拟机原理2之Tinker接入已经给咱们的工程集成好了Tinker了,接下来则对它的原理进行一个探究。
Tinker工作原理简述:
简述它的实现原理:
阶段1:使用bsdiff对新旧apk做差分异,得到差量化产物patch.apk补丁文件。
阶段2:使用dexpatch把下载的差量patch.apk补丁文件中的dex,so,res和基线版本做全量合并,dex和so文件全量合并后得到完整的tinker_NClass.apk,res文件全量合并后得到完成的resource.apk。
阶段3:动态加载tinker_NClass.apk进行apk插队实现类修复,动态加载resource.apk并反射替换context中的assetManager实现资源文件的更新。
下面用图来展示一下其过程:
这里主要是分析全量合并、动态加载dex插队的阶段,对于新旧apk生成差分异包用到了gradle插件技术,这块在之后会有专门章节来学习,所以这个暂且不分