核心技术
代码修复
资源修复
动态链接库修复
资源修复
1.Instant Run
减少第二次构建及以后的构建和部署时间
不需要重新安装APP
部署三种方式:
Hot swap:修改一个现有方法中的代码时采用。
Warm swap:Activity需要重启。修改或删除一个现有的资源文件时采用。
Cold swap:APP需要重启。比如添加、删除或修改一个字段和方法、添加一个类等。
步骤:
(1)创建新的AssetManager,通过反射调用addAssetPath方法加载外部的资源,这样新创建的AssetManager就含有了外部资源。
(2)将AssetManager类型的mAssets字段的引用全部替换为新创建的AssetManager。
代码修复
1.底层替换方案
修改Native层原有类
获取javaMethod在ART虚拟机中对应的一个ArtMethod指针,ArtMethod指针结构体中包含了Java方法的所有信息。
替换ArtMethod结构体中的字段或者替换整个ArtMethod结构体。
立即生效
2.类加载方案
基于Dex分包方案:65536限制、LinearAlloc限制
根据ClassLoader的双亲委托模型,先加载修改过的.class文件,旧的类文件就不会被加载。
需重启
3.Instant Run方案
ASM,一个Java字节码操控框架,能够动态生成类或者增强现有类的功能。可以直接产生class文件,也可以在类被加载到虚拟机之前动态改变类的行为。
动态链接库的修复
1.将so补丁插入到NativeLibraryElement数组的前部,让so补丁的路径先被返回和加载。
2.调用System的load方法来接管so的加载入口。