Tinker 处理patch流程
按推荐方式使用编译注解生成Application
1. Application 加载已合成的patch
- 加载patch 入口从注册的Application的onBaseContextAttached()开始

loadTinker()方法即是tinker 加载patch的逻辑,之后调用代理ApplicationLike的原有逻辑,方便修改
- 反射生成TinkerLoader 实例,调用tryLoad()方法

- 经过一连串调用链:各种校验,检查dex,根据不同的系统版本,去反射处理dexElements,合并patch数组,设置给pathList。
2. 根据补丁合成完整Patch,以便重启加载
- 入口,一句代码:
TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(),
Environment.getExternalStorageDirectory().getAbsolutePath() + "/patch_signed.apk");
- 默认调用Tinker的DefaultPatchListener中的onPatchReceived方法(可以自定义),启动一个IntentService——TinkerPatchService

- TinkerPatchService处理patch文件,拷贝到私有目录,dexdiff合并dex,patch合并完成等待重启加载

本文介绍了Tinker处理补丁(patch)的流程,包括通过Application加载已合成的补丁,并详细解析了补丁如何被合成及加载的过程。从loadTinker()方法入手,通过反射生成TinkerLoader实例并进行一系列校验,最终将补丁合并到应用中。
5211

被折叠的 条评论
为什么被折叠?



