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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值