在当今Android 开发中,出现了很多热修复框架,也有很多开发者将热修复放入到自己的app中,以达到如果遇到线上bug的时候不需要重新发版本的效果。
热修复所需要的理论知识还是很多很广的,虽然现在网上框架千万种,但究其原理也是基本上相当的,所以只要基本原理不变,以后出现再多的热修复框架,你也能轻而易举的掌握它。
热修复能够解决的问题
所有东西的产生都是为了解决某些问题的,热修复框架产生主要解决的问题我罗列了下基本有以下几点:
- 发不出去的版本出现了一个大bug,需要立马解决,但是传统的bug修复的话又需要发版本,时间周期拉长,影响用户使用
- 版本升级成本还是比较大的,对于一些经常不升级的用户来说,就会出现bug一直在的情况
- 对于一些功能点小但是比较重要的功能需要紧急上线的,就比如一些节日活动功能,发版本成本略高
主流热修复框架对比
这里我把几个有代表意义的大厂开源出来的热修复框架做了个对比,对比如下:
学习计划
总的来说,热修复分为三个大模块:资源修复、代码修复、.so动态库修复。
代码修复一般又分为热启动修复和冷启动修复。
热启动修复其实就是底层替换方案,是在虚拟机已经加载好类的基础上,直接替换掉相对应的方法,这种方法是可以即时生效的,因为这是在原来类的基础上进行的修改。但是这种方法适用范围比较窄,替换原有方法的时候不能破坏原有类的结构。
冷启动的话需要重新启动app才能产生效果,原理其实就是在app启动的时候让classLoader去加载相对应的新的类。这种方法适用范围比较广,就是即时生效性差,需要重启。
资源修复,其实简单的说就可以分成三种情况:
- 资源的增加。也就是热修复后的apk在某一个地方或几处地方增加引用了之前的包没用的资源。
- 资源的删减。这个很简单,你不用就可以了,所以这种情况其实可以不用考虑
- 资源的修改。替换掉某些资源。
所以重点资源修复我们要深入研究资源是如何打包到apk里的过程以及apk是如何读取到我要用的资源文件的,只有明白了这个流程,才能更好的理解资源修复的过程。
动态库修复,则需要去深究app启动的时候是如何加载相对应的动态库的,这才能获取到修复的最佳方案。
这样,Android热修复就简单介绍到这里了,接下来,我会根据我下面罗列的各个小点,深入到对应的源代码里面,一步一步的去解剖热修复原理。
目录:
- Android资源编译和打包过程分析
- Android apk读取资源文件过程详解
- Google Instant Run源码分析
- 热修复框架资源修复过程分析
- JVM,Dalvik,ART类加载机制详解
- Sophix热修复代码修复原理详解
- Tinker热修复代码修复原理详解
- .so动态库加载过程详解
- 热修复框架.so动态库修复过程详解
- Android多渠道打包与热修复
- Android加固与热修复分析
个人微信公共账号已上线,欢迎关注: