硬修复:

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

冷修复:

打补丁包,使用动态库和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. Spring Boot 最流行的 16 条实践解读!

    Spring Boot是最流行的用于开发微服务的Java框架.在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践.这些内容是基于我的个人经验和一些熟知的Sp ...

  2. Antd中,Select 中value设值,导致placeholder不生效解决方法

    <Select key="sm2" placeholder="姓名" showSearch={true} allowClear={true} showAr ...

  3. C# 实现Escape UnEscape方法(支持中文-转载)

    //Escape方法 public static string Escape(string s) { StringBuilder sb = new StringBuilder(); byte[] by ...

  4. php for循环a到z

    首先先介绍2个php内置函数 ord(string):函数返回字符串的首个字符的 ASCII 值.//string:必需.要从中获得 ASCII 值的字符串. chr(ascll): 函数从指定的 A ...

  5. 深入理解TCP/IP传输层

    传输层:负责数据能够从发送端传到接收端(只需要关注点对点的传输,中间的传输过程一概不管) UDP和TCP UDP(全双工):1.无连接,2不可靠,3.面向数据报 分别表示UDP源端口号.目的端口号.U ...

  6. Mysql中的排序查询

    进阶3:排序查询 语法: select 查询列表 from 表 [where 筛选条件]order by 排序列表 [asc 升序 | desc降序] 例子 查询员工信息,要求工资从高到低 SELEC ...

  7. Angular复习笔记7-路由(上)

    Angular复习笔记7-路由(上) 关于Angular路由的部分将分为上下两篇来介绍.这是第一篇. 概述 路由所要解决的核心问题是通过建立URL和页面的对应关系,使得不同的页面可以用不同的URL来表 ...

  8. API之Scanner,Random,ArrayList基础运用。重点是ArrayList

    有关API的这些类可以参考JDK的官方中文文档,看我的另一篇文章有下载==> https://www.cnblogs.com/gz18221/p/11968505.html<==文章地址 ...

  9. WinExec, ShellExecute,CreateProcess 区别

    其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂. WinExec 有两个参数,前一个指定路径,后一个指定显示方式. ShellExe ...

  10. redis AbortOnConnectFail

    AbortOnConnectFail =true 服务器上停止redis service,即便后来redis服务端修好能够接通时,也不会自动连接. 所以建议设为false