Tinker 处理patch流程

Tinker 处理patch流程

按推荐方式使用编译注解生成Application

1. Application 加载已合成的patch

  • 加载patch 入口从注册的Application的onBaseContextAttached()开始
tinker1.png

loadTinker()方法即是tinker 加载patch的逻辑,之后调用代理ApplicationLike的原有逻辑,方便修改

  • 反射生成TinkerLoader 实例,调用tryLoad()方法
tinker2.png
  • 经过一连串调用链:各种校验,检查dex,根据不同的系统版本,去反射处理dexElements,合并patch数组,设置给pathList。

2. 根据补丁合成完整Patch,以便重启加载

  • 入口,一句代码:
 TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(),
                Environment.getExternalStorageDirectory().getAbsolutePath() + "/patch_signed.apk");
  • 默认调用Tinker的DefaultPatchListener中的onPatchReceived方法(可以自定义),启动一个IntentService——TinkerPatchService
tinker4.png
  • TinkerPatchService处理patch文件,拷贝到私有目录,dexdiff合并dex,patch合并完成等待重启加载
tinker5.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容