Tinker 处理patch流程
按推荐方式使用编译注解生成Application
1. Application 加载已合成的patch
- 加载patch 入口从注册的Application的onBaseContextAttached()开始
![](https://img.haomeiwen.com/i2780987/27a34c895841436b.png)
loadTinker()方法即是tinker 加载patch的逻辑,之后调用代理ApplicationLike的原有逻辑,方便修改
- 反射生成TinkerLoader 实例,调用tryLoad()方法
![](https://img.haomeiwen.com/i2780987/02903e6d2902abeb.png)
- 经过一连串调用链:各种校验,检查dex,根据不同的系统版本,去反射处理dexElements,合并patch数组,设置给pathList。
2. 根据补丁合成完整Patch,以便重启加载
- 入口,一句代码:
TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), Environment.getExternalStorageDirectory().getAbsolutePath() + "/patch_signed.apk");
- 默认调用Tinker的DefaultPatchListener中的onPatchReceived方法(可以自定义),启动一个IntentService——TinkerPatchService
![](https://img.haomeiwen.com/i2780987/67f4ad53af0117d3.png)
- TinkerPatchService处理patch文件,拷贝到私有目录,dexdiff合并dex,patch合并完成等待重启加载
![](https://img.haomeiwen.com/i2780987/4dec46de6de03bcd.png)
网友评论