在发布了新版apk后,发现有bug,通常是修复好bug后,经过测试等一系列流程,再发布到各个平台上,这样做特别耗时且频繁下载更新使用户体验很差。而使用热修复发现bug后,只需修改后发布补丁包,无需用户下载。
因为我司使用了bugly作为线上监测工具,所以使用bugly来实现热修复,bugly热修复实际是对腾讯的Tinker进行了封装,配置更简单,使用更方便。具体步骤各位自己配置一次印象才会更加深刻,毕竟好记性不如烂笔头,实践出真知。
Tinker使用的是类加载方案实现热修复。
类加载方案步骤原理:
有pathClassLoader和DexClassLoader都是继承了BaseDexClassloader
1.在BaseDexClassloader创建的时候 就创建了一个pathDexList,
2.在pathDexList构造器中调用makeDexElements ()方法初始化Element数组并将其赋值给成员变量dexElements。而且,通过makeDexElements()方法源码可以看到它所做的事情就是遍历传递过来的dexPath,然后依次加载每个dex文件。
3.之后pathDexList调用findClass方法去找到相应的dex文件,
4.我们将修改后的文件打包成dex放到dexELements的最前面
5.通过dexclassloader类加载器就会加载到正确的dex文件,不会再加载后面crash的文件,即完成热修复。
参考文章
https://www.jianshu.com/p/08748b128ce3
https://blog.csdn.net/u013408979/article/details/81334742
https://www.jianshu.com/p/cb1f0702d59f