1、研究主流的热修复框架后,你会发现andfix和dexposed采用jni hook方法,不用重启就能修复,而Nuwa的ClassLoader思路因为类被虚拟机加载后,不会重新加载,所以需要重启。Instant Run是怎么实现不重启加载的呢,难道也是jni hook?

2、Instant Run原理

一个插件一个库,Instant Run用的是gradle plugin和instant-run.jar。

3、gradle plugin的两个作用

(1)第一次运行,应用transform API修改字节码。

step1:给所有的类添加$change字段,$change为IncrementalChange类型,IncrementalChange是个接口。

step2:修改类的全部方法(新的逻辑是:如果$change不为空,去调用$change的access$dispatch方法,参数为方法签名字符串和方法参数数组,否则调用原逻辑。)

(2)后续运行,dx补丁类,生成补丁dex。

step1:被修改类对应的补丁类

补丁类,并不是你修改后的类,而是由gradle plugin自动生成,实现了IncrementalChange接口的类。

该类类名在原名后面添加$override,复制修改后类的大部分方法,实现IncrementalChange 接口的access$dispatch方法,该方法会根据传递过来的方法签名,调用本类的同名方法。

只要把原类的$change字段设置为该类,那就会调用该类的access$dispatch方法,就会使用修改后的方法了。

step2:被修改类的记录类

AppPatchesLoaderImpl记录了所有被修改的类,也会被打进补丁dex。

4、instant-run.jar

设置原类的$change字段为补丁类

(1)AppPatchesLoaderImpl类不但记录了全部被修改的类,还提供load方法支持设置被修改原类$change字段.

(2)当收到补丁通知时,新建一个DexClassLoader,去反射加载补丁dex中的AppPatchesLoaderImpl类,调用load方法即可,load方法中会去加载全部补丁类,并赋值给对应原类的$change。

以上主要是探究Instant Run处理代码变化的思路,对资源变化没有分析。

【Android】Instant Run原理解析相关推荐

  1. Android 热修复原理解析

    概述 关联文章 JVM 类加载机制 Android 中的ClassLoader 假如刚发布的版本出现了bug,我们就需要解决bug,并且重新发布新的版本,这样会浪费很多的人力物力,有没有一种可以不重新 ...

  2. Android 广播实现原理解析

    Android 广播实现原理解析 前言 Android四大组件中的BroadcastReceiver,在我们实际工作中被频繁的使用,我们可以利用系统的开机广播,网络状态改变的广播等等实现我们的业务逻辑 ...

  3. Android动画-Animation原理解析

    Android动画-Animation原理解析 一.概述 在android中动画分为3类,帧动画.补间动画.属性动画 今天要说的就是"补间动画",补间动画的基类是Animation ...

  4. (传送门)instant run原理

    深入理解Android Instant Run运行机制:https://cloud.tencent.com/developer/article/1037769

  5. Android 插件化原理解析——Activity生命周期管理

    之前的 Android插件化原理解析 系列文章揭开了Hook机制的神秘面纱,现在我们手握倚天屠龙,那么如何通过这种技术完成插件化方案呢?具体来说,插件中的Activity,Service等组件如何在A ...

  6. Android代码入侵原理解析(一)

    Original 2017-05-06 付超红 滴滴安全应急响应中心 2017年初,在滴滴安全沙龙上,滴滴出行安全专家--付超红,针对App的攻与防进行了分享.会后大家对这个议题反响热烈,纷纷求详情求 ...

  7. Android 插件化原理解析——Hook机制之AMSPMS

    在前面的文章中我们介绍了DroidPlugin的Hook机制,也就是代理方式和Binder Hook:插件框架通过AOP实现了插件使用和开发的透明性.在讲述DroidPlugin如何实现四大组件的插件 ...

  8. Android之Butterknife原理解析

    转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! ##前言 Butterknife是一个专注于Android系统的View注入框架, ...

  9. Android插件化原理解析——广播的管理

    在Activity生命周期管理 以及 插件加载机制 中我们详细讲述了插件化过程中对于Activity组件的处理方式,为了实现Activity的插件化我们付出了相当多的努力:那么Android系统的其他 ...

  10. Android插件化原理解析——ContentProvider的插件化

    目前为止我们已经完成了Android四大组件中Activity,Service以及BroadcastReceiver的插件化,这几个组件各不相同,我们根据它们的特点定制了不同的插件化方案:那么对于Co ...

最新文章

  1. C# 打好基础图文详解
  2. [node 工具] 用 Node.js 将 bugzilla 上的 bug 列表导入到 excel 表格在线版本之一(server 端)...
  3. php server 连接字符串,sqlServer 数据库常用连接字符串
  4. uuid java 重复_Java中使用UUID工具类生成唯一标志防止重复
  5. oracle 删除数据_2020最新最全数据库系统安全
  6. T-SQL连接查询,基础连接理解
  7. VMware11.1.2+centOS7.4虚拟机联网问题并设置静态IP
  8. 不规则裁剪图片css,在css中将div剪裁成不规则形状的方法
  9. Sublime 3 打开GBK 编码文件中文乱码 解决办法
  10. log日志查看软件logviewer-pro
  11. Microsoft SQL Server 2000 简体中文企业版 +SP4升级补丁
  12. linux格式化叫大硬盘命令,Linux_format命令 参数说明,格式化 格式化指定卷中的磁盘 - phpStudy...
  13. 关于在Unity2018中使用Vuforia实现基础图片识别AR展现效果
  14. CSS 多列等高的几种实现方式
  15. photoshop插画插件_一键生成2.5D风格插画的PS插件
  16. android layout html,layoutgravity
  17. perl脚本实战总结
  18. SAP 创建会计冲销凭证
  19. CAD开发-CAD二维配管辅助工具
  20. ​cmd中如何退出Python​

热门文章

  1. linux那些事儿 pdf,[转] linux那些事儿之我是HUB - PDF文件
  2. 华为公司内部控制手册(干货)
  3. 【FPGA】超声波测距
  4. 微信开发遇到的那些坑
  5. DSPE-PEG-TAT,磷脂-聚乙二醇-靶向穿膜肽TAT,一种磷脂PEG肽
  6. Vue单文件组件TypeScript写法
  7. win版石器和linux,石器时代私服架设教程Linux版
  8. 大数据处理系统,分布式存储系统和分布式计算框架介绍
  9. 传奇3服务器配置文件,分享传奇三架设的全部详细攻略
  10. python:实现newton_raphson牛顿拉夫森算法(附完整源码)