Android 进阶解密阅读笔记16

2021-03-14  本文已影响0人  jkwen

热修复技术

热修复技术在兴起时一度很流行,但随后遭到了苹果的封杀,我参与的 Android 项目在用与不用间变得含糊不清。不过就技术本身来说,我觉得还是值得了解的,并且就实际用途上也能起到一定的作用。

热修复的诞生主要是为了解决,1.在生产遇到一个小问题,但又影响业务使用的时候,为了避免重新发版本带来的较大资源开销。2.生产遇到的问题简单但影响很严重,例如一个空指针崩溃,为了快速修复和全面覆盖。

另外,Android Studio 的 Instant Run 机制也推动了热修复技术的发展。

热修复技术可以从 3 个方面展开,

  1. 类加载方式
    这个要基于类加载的过程,并且还涉及到 Dex 分包机制。在 ClassLoader 加载 dex 文件时,是有序的,也就是主 dex 包先加载,后续按需求动态加载。所以如果某个类有问题,就可以抢在问题类加载之前加载修复类,这样问题类就不会被加载了。
    基于这个原理,需要重新加载才能生效,也就是要重启应用。这种方式的热修复技术实现可以看 Tinker
  2. Instant Run
    在第一次构建 apk 时 Instant Run 会通过 ASM 为每个类植入一段代码,正是这段代码起到了差异对比,也才有了速度的提高。通过,运用这段代码逻辑就可以做到问题类的修复。这种方式的热修复技术实现可以看 Robust
  3. 底层替换方式
    这个不像「类加载方式」,它从更底层的 Native 层,从数据源头修改数据引用指向从而达到问题的修复。具体是替换 ArtMethod 数据结构的部分或全部字段来实现。
    基于这个原理,对设备厂商的标准和版本要求比较高,因为底层更趋于具体化,各个设备的底层差异会更多,所以兼容性要重点考虑。这种方式的热修复技术实现可以看 AndFix

以上就是热修复技术的主要内容概括,虽说热修复功能很强大,不过我们应该合理运用,或者说只有在万不得已的时候才使用它,平时项目里还是要保证好产品的质量。

上一篇 下一篇

猜你喜欢

热点阅读