硬修复:

直接修改工程源码,重新发版;

冷修复:

打补丁包,使用动态库和hook技术,在程序启动时完成问题代码修复;案例:iOS逆向工程;

特征:不修改原始代码、补丁发布、目前不支持动态发布;

热修复:

可执行文件内直接继承热修复启动机制;

程序启动后热修复引擎动态检查家在补丁包,完成动态hook;

原理:

1、修复引擎包含更新检查;

2、消息重定向;将需要修改的功能和新添加的功能重定向到JPForwardInvocation;

在JPForwardInvocation中区别对待无修改和修改过的函数;

修改过的函数最终会调用js进行解释执行;

3、js包含的修改过的功能最终会解释为oc执行;

这个方法成功调用会经历哪些流程呢?

基本上这就是一个Patch方法调用的流程。
首先点击按钮调用handlebtn方法,其IMP未找到跑到消息转发流程,经过resolveInstanceMethod->forwardingTargetForSelector->forwardInvocation等方法,因为最后的forwardInvocation方法被用method swizzling 转换成了JPForwardInvocation,所以JPForwardInvocation被调用。
首先查找方法对应的JPSelector是否存在,如果不存在调用原forward方法,如果存在调用JPSelector对应的IMP。
记得上一篇我们在patch(即demo.js)加载时说过,会将Patch方法以JSValue的形式存储在OC的列表__JSOverrideMethods里面。
这个JPSelector的IMP的功能就是找到以JSValue形式存储的Patch方法,然后调用它。

https://www.mobilezhao.com/?tag=jspatch

热修复技术沉思:jspatch的更多相关文章

  1. Android 热修复技术(1)---原理

    热修复技术分为几部分: 原理介绍 Android HotFix源码分析 自定义框架 1.Android分包MultiDex原理 首先Dex是什么东西? Dex就是Window里面的exe文件 也就是可 ...

  2. Android热修复技术选型(不在市场发布新版本的情况下,直接更新app)

    2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案.阿里AndFix以及微信Tinker,它们在原理各有不同,适用场景各异,到 ...

  3. 全面了解Android热修复技术

    WeTest 导读 本文探讨了Android热修复技术的发展脉络,现状及其未来. 热修复技术概述 热修复技术在近年来飞速发展,尤其是在InstantRun方案推出之后,各种热修复技术竞相涌现.国内大部 ...

  4. Android热修复技术选型——三大流派解析

    声明,本文转载自微信公众号文章 2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案.阿里AndFix以及微信Tinker,它们 ...

  5. Android热修复技术原理详解(最新最全版本)

    本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结   通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单 ...

  6. 包建强的培训课程(15):Android App热修复技术

    @import url(/css/cuteeditor.css); Normal 0 10 pt 0 2 false false false EN-US ZH-CN X-NONE $([{£¥·‘“〈 ...

  7. 《深入探索Androdi热修复技术原理(阿里巴巴)》--读书笔记

    No1: Hybrid就是原生和Html5混合开发app No2: 插件化方法Altas或者DroidPlugin No3: 热修复技术可以把更新补丁上传到云端,此时APP就可以直接从云端下拉补丁直接 ...

  8. Android热修复技术总结

    https://blog.csdn.net/xiangzhihong8/article/details/77718004 插件化和热修复技术是Android开发中比较高级的知识点,是中级开发人员通向高 ...

  9. android Qzone的App热补丁热修复技术

    转自:https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731 ...

随机推荐

  1. C语言输入带空格的字符串

    参考:https://blog.csdn.net/vincemar/article/details/78750435 因为: scanf("%s",str); 遇到空格就停止接收后 ...

  2. Linux中常用命令cat

    cat可谓是随处可用,全名:concatenate and print files.用于连接和打印文件,按序读取文件内容,然后输出到标准输出.如果文件是单个破折号-或者缺乏文件,cat将读取标准输入. ...

  3. subjective--主观

    existing in the mind; belonging to the thinking subject rather than to the object of thought (oppose ...

  4. 可落地的DDD(3)-如何利用DDD进行微服务的划分

    摘要 前面两篇介绍了DDD的目标管理.DDD的工程结构调整.这篇讨论微服务的划分.微服务是目前后端比较流行的架构体系了,那么如何做好一个微服务的划分?一个微服务的粒度应该是多大呢?这篇主要介绍如何结合 ...

  5. C# Winform 打印控件PrintDocument

    由于本着节约的原则,这里的打印都只是保存为.oxps格式的文件. 在我调试时每次打印完成后,窗体都会自己闪退. 在网上并没有相关资料,经过加入断点确认问题在 private void btnPrint ...

  6. C# 特性和索引(C#学习笔记06)

    特性 特性(Attribute)是用于在运行时传递程序中各种元素(比如类.方法.结构.枚举.组件等)的行为信息的声明性标签. 特性可以当成一个特殊的类看待 列举特性语法: [attribute(pos ...

  7. APS.NET MVC + EF (07)---表单和HTML辅助方法

    在ASP.NET MVC中,可以借助HtmlHelper 对象来输出页面内容,提高开发效率.下面,我们将介绍一些常用的辅助方法. 7.1 HTML辅助方法 BeginForm 该辅助方法主要用来产生& ...

  8. Java自学-接口与继承 对象转型

    Java中的对象转型 示例 1 : 明确引用类型与对象类型的概念 首先,明确引用类型与对象类型的概念 在这个例子里,有一个对象 new ADHero(), 同时也有一个引用ad 对象是有类型的, 是A ...

  9. CSS文本居中问题

    文本水平居中 水平居中比较简单,将对应的html元素text-align属性值为center,其子元素就会水平居中. 文本垂直居中 单行文本垂直居中 设置文本元素的line-height属性值为元素高 ...

  10. CSS3 新增文本样式

    CSS3 对原来的 CSS2 版本中已定义的属性取值进行修补,增加了更多的属性值,来适应复杂环境中文本的呈现. 一.定义文本阴影 可以给文字添加阴影效果了 Shadow 影子 语法: text-sha ...