移动知识

热修复系列文章1 —— 什么是热修复?(了解篇)

2018-09-20  本文已影响35人  Amy_LuLu__

本篇文章来源:
热修复——深入浅出原理与实现
--> 热修复的原理(源码分析) 自己写的热修复代码+demo演示

目录

  1. 热修复解决的问题
  2. 目前较火的热修复方案大致分为两派
  3. Android中如何动态修复bug
  4. 热修复的原理(通过类加载机制)

1. 热修复解决的问题:

在热修复出现之前,一个已经上线的app中如果出现了bug,即使是一个非常小的bug,不及时更新的话有可能存在风险,若要及时更新就得将app重新打包发布到应用市场后,让用户再一次下载,这样就大大降低了用户体验。
而当热修复出现之后,这样的问题就不再是问题了。

2. 目前较火的热修复方案大致分为两派

分别是:

3. Android中如何动态修复bug

大多数bug一般有2种:
①代码功能不符合项目预期,即代码逻辑有问题。
②程序代码不够健壮导致App运行时崩溃。

这两种情况一般是一个或多个class出现了问题,在一个理想的状态下,我们只需将修复好的这些个class更新到用户手机上的app中就可以修复这些bug了

但说着简单,要怎么才能动态更新这些class呢?

其实,不管是哪种热修复方案,肯定是如下几个步骤
①下载补丁(内含修复好的class)到用户手机,即让app从服务器上下载(网络传输)
②app通过“某种方式”,使补丁中的class被app调用(本地更新)

这里的“某种方式”对应的是

4. 热修复的原理:(通过类加载机制)

① 通过java加载机制/Android的类加载器

具体源码分析看热修复——深入浅出原理与实现

安卓的类加载器在加载一个类时会先从自身DexPathList对象中的Element数组中获取(Element[] dexElements)到对应的类,之后再加载。采用的是数组遍历的方式,不过注意,遍历出来的是一个个的dex文件。

在for循环中,首先遍历出来的是dex文件,然后再是从dex文件中获取class,所以,我们只要让修复好的class打包成一个dex文件,放于Element数组的第一个元素,这样就能保证获取到的class是最新修复好的class了(当然,有bug的class也是存在的,不过是放在了Element数组的最后一个元素中,所以没有机会被拿到而已)。

上一篇 下一篇

猜你喜欢

热点阅读