热修复

热修复:
热修复说白了就是给项目打补丁,比如公司上线的一个app,过户反馈有重大bug,需要紧急修复.如果按照通常的做法,那肯定要加班修复bug再测试再重新打包发布.这样子做非常麻烦,成本非常高,效率还特别低.所以热修复就被开发出来了.一般通过事先设定好的接口从网上下载无bug的代码来替换有bug的代码.这样就省事多了,用户体验也好.
转自
https://www.cnblogs.com/popfisher/p/8543973.html,非常感谢作者的详细介绍,下面是自己总结出来的一部分,想看详细的可前往作者地址查看。

1.什么是热修复? 2.热修复框架分类 3.总结

1.首先我们说下什么是热修复:

正常的开发流程:
版本1.0上线-----用户安装—发现bug----紧急修复—重新发布版本1.1上线—用户安装
热修复的开发流程:
版本1.0上线----用户安装—发现bug—紧急修复—打出补丁,推送给用户—自动拉取补丁修复
热修复的优势:
1.1:无需重新发布版本
1.2:用户无感知修复,无需下载最修女的应用,代价小,进而能够提高用户体验
1.3:修复成功率高,把损失降到最低
修复的是什么:
这里呐主要的就是资源修复,代码修复,SO库修复

2.这里主要了解三类:

   2.1:美团Rubust---热插拔原理
         优势:
            0.补丁实时生效,不需要重新启动
            1.几乎不会影响性能(方法调用,冷启动)
            2.支持Android2.3-8.x版本
            3.高兼容性(Robust只是在正常的使用DexClassLoader), 高稳定性,修复成功率高达99.9%.
            4.支持方法级别的修复,包括静态方法
            5.支持增加方法和类
            6.支持ProGuard的混淆,内联,优化等操作
      缺点:
            0.代码是侵入式的,会在原有的类中加入相关代码
            1.So和资源的替换暂时不支持
            2.会增大apk的体积,平均一个函数会比原来增加17.47个字节,10万个函数会增加1.67M.
            3.会增加少量的方法数,使用了Robust插件后,原来能被ProGuard内联的函数不能被内联了。
   2.2:微信Tinker
          优点:
             0.支持动态下发代码
             1.支持替换So库以及资源
         缺点:
             0.不能即时生效,需要下次启动。
   2.3:阿里Sophix
         优点:
             0.各方面都做了大量的优化。
          缺点:
             0.不开源,商业收费

热修复到底是为了干什么:
及时的修复线上BUG,采用了Tinker技术

Java代码的BUG,而不能更改XML等其他文件

为什么热修复做不了这些事情呢?

热修复打的补丁包,实际是Dex文件,而Dex文件是java源码编译后生成的java字节码文件

那么通过热修复修复BUG的原理,实际上很简单:就是把新的编译完的Dex文件与老项目APK的Dex文件进行替换

dex分包

热修复实际就是让程序重新加载apk的dex文件,以前采用的是android dex分包方案,实现的逻辑非常复杂,现在你用Tinker,他就帮你做了这些事情,所以热修复变得很简单

数据库文件 — sqlite

普通文件 --File

XML文件 — pull

classex.dex – ClassLoader去解析

我们的系统怎么让他加载我们新的Dex文件,而不是依然加载旧的Dex文件,这在我们自己设计的时候非常的困难

但是Tinker做了一些逻辑修改,让我们的android系统,在加载Dex文件的时候,优先加载补丁包的Dex文件

注意加载完补丁包,BUG是不是修复了

如果补丁包没有被删除的话,那么再次打开APP的时候,依然会重新加补丁包,所以修复完的apk,一定要在用完补丁包的时候,删除补丁包

3.总结:

如果不考虑增大APK体积,只是简单的修复代码,不修复SO和资源,选择Robust是最稳定的,否则的话选择Tinker是一个不错的方案。虽然阿里的Aophix横空出世,但是它不开源,而且商业收费,所以一般不是很赚钱的app选择收费的可能就很小了。不过它的确各方面都做了大量的优化。

注意:做了热修复之后你的apk就不能够加固

你可能感兴趣的:(Android,面试(Android)常见问题)