美文网首页
Tinker 处理patch流程

Tinker 处理patch流程

作者: JustinBetter | 来源:发表于2017-02-10 14:42 被阅读94次

    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

    相关文章

      网友评论

          本文标题:Tinker 处理patch流程

          本文链接:https://www.haomeiwen.com/subject/plbgittx.html