美文网首页
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