美文网首页移动知识
热修复系列文章1 —— 什么是热修复?(了解篇)

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

作者: Amy_LuLu__ | 来源:发表于2018-09-20 10:04 被阅读35次

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

目录

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

1. 热修复解决的问题:

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

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

分别是:

  • 阿里系:DeXposed、AndFix:从底层二进制入手(c语言)。
  • 腾讯系:Tinker:从java加载机制入手。

3. Android中如何动态修复bug

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

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

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

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

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

  • 阿里系:DeXposed、AndFix:从底层二进制入手(c语言)。
  • 腾讯系:Tinker:从java加载机制入手。【就是使用Android的类加载器,通过类加载器加载这些修复好的class,覆盖对应有问题的class,理论上就能修复bug了】

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

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

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

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

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

相关文章

网友评论

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

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