InstantRun学习笔记

InstantRun编译时做的事

1、替换我们应用的application为BootstrapApplication,同时会修改AndroidMainifest.xml中application为BootstrapApplication,BootstrapApplication将做为一个宿主来加载我们的程序和资源。

2、用asm工具修改我们的类增加静态$change变量 。($change为IncrementalChange类型此后我们修改任何类,都将新生成类并实现此接口,像给我们的类添加了个代理类)

3、修改每个方法判断新增加的变量$change是否为空,如果$change不为空就执行$change.access$dispath方法,这个方法通过第一个参数(即方法签名)从而确定到补丁 Dex 中的相应方法

AndroidInstantRun运行时做的事

1、执行BootstrapApplication的attachBaseContext方法
修改ClassLoader继承关系,用IncrementalClassLoader加载类
2、创建真实的RealApplication(自已的Application)执行attachBaseContext方法
3、替换我们应用所有的application为realApplication
4、替换我们应用所有的mAssets为newAssetManager
5、调用realApplication的onCreate方法
6、启动Server,Socket接收patch列表

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,868评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,941评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,065评论 25 708
  • 我想 陪孩子学会游泳
    立志做一个坏人阅读 107评论 0 0
  • 今年来感觉「时间结束了」的事件有两个。一是和S断交。二是得知师傅将为人父。 就是你曾以为到地老天荒也不会更改的定律...
    南言阅读 176评论 0 0