美文网首页
InstantRun学习笔记

InstantRun学习笔记

作者: Midlet | 来源:发表于2017-03-13 14:33 被阅读6次
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列表

相关文章

网友评论

      本文标题:InstantRun学习笔记

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