当前位置: 移动技术网 > 移动技术>移动开发>Android > 简单谈谈Android中的热修复原理

简单谈谈Android中的热修复原理

2018年11月25日  | 移动技术网移动技术  | 我要评论

脑子里一直有个梗,这个热修复到底是个什么东西呢?来来来,往下看!

什么是热修复?

说的清新脱俗一点,就是线上实时修复bug

为什么要有热修复呢?(优点)

降低了成本,用户体验也好,不用像原来修复bug(哪怕就是一行代码)还得重新打包再发送新版本到应用市场,再让用户下载,那样成本高不说,用户体验还特别不好,所以就出现了热修复。

热修复的原理?

热修复主要是通过android的类加载机制来实现的。android中有两个类加载器pathclassloader和dexclassloader,准确的来说应该是有三个,还有一个basedexclassloader,basedexclassloader是上面这两个类加载器的父类,在basedexclassloader里面有一个重要的属性dexpathlist,dexpathlist在basedexclassloader的构造函数中被创建出来,dexpathlist里面有两个构造函数splitdexpath()(将dexpath目录下的所有文件转成一个file集合) 和makedexelments()(将file集合转为elment数组), 在这个basedexclassloader里面还有一个特别重要的方法,这也是它的核心方法。 findclass()从elemet数组中拿出一个个dex文件,在从dex文件中搜索class,正因为这个特性,我们只需要将element数组与app原element数组合并,得到一个新的element数组,要注意摆放的先后顺序,然后将这个新的element数组用反射的方式赋值给app当前类加载器的pathlist中的elements数组,因为pathlist的 findclass()是采用遍历方式一个个从element中找class,而修复好的class所在的element排在有bug的class的element的前面,所以,当app再次从类加载器中拿class时就只会拿到前面的class,也就是bug已经修复好的class。这就是热修复的原理。。。 看图说话:

\

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网