Android热更新
修改线上版本的bug,用技术去实现不更新整个apk的条件下,修改掉bug。
在开发过程中,没有一个app发布到市场之后,在用户的使用过程中百分百会发生崩溃,一般情况下不是B线的crash,只要控制app在crash一定的比例,常用的比例在千分之一以下就可以。但是在某些情况下,由于测试的不充分,比如开发人员开发的不严谨导致app经常性的崩溃,而这个崩溃的比率超过正常的话,比如说超过了千分之一,甚至超过了千分之二分贝以后,在这些情况下我们只能紧急的修复出现线上的问题,然后我们通过常用的方式,代码修改然后进行重新打包然后发布等等。同时在发布完要通过推送,消息的形式告诉用户要更新了要自动安装。安卓热修复技术出现,让我们能够更快速的解决一些问题,而不需要重新发布版本可以修复线上的BUG。
一,热更新流程
1.线上检测到严重的crash。因为每一个app都会集成一些线上的crash的sdk,这样会通过线上的sdk检查到app的运作状况,这其实就是一个热修复的基础。在线上的crash统计中,可以得知app是否存在需要快速在线热修复的问题,如果存在,会根据crash日志定位到代码所存在的问题所在。
2.拉出bugfix分支并在分支上修复问题。开发都是在debug分支上开发的,如果有单独的业务逻辑,可以从debug开启另外一个分支来进行开发,在bugfix分支上修复一些线上的问题
3.Jenkins构建和补丁生成
4.app通过推送或主动拉取布丁文件,并在合适时机推送给主用户。
5.将bugfix代码合到master上,这样会保证以后的代码不会出项这样的问题。
二,主流热更新框架介绍
1.Dexposed Dexposed是一个阿里巴巴无线事业部推出的Android平台的无侵入运行期AOP开源框架,基于 Xposed 开源项目,旨在解决像性能监控、在线热补丁等移动开发常见难题。
2.AndFix AndFix,全称是Android hot-fix。是阿里开源的一个热补丁框架,允许APP在不重新发布版本的情况下修复线上的bug。支持Android 2.3 到 6.0,并且支持arm 与 X86系统架构的设备。完美支持Dalvik与ART的Runtime,补丁文件是以 .apatch 结尾的文件。
3.Nuwa 基于类加载器ClassLoder加载desk,它的基础是desk分包的基础上。
三,热更新原理
1.Android类加载机制
*1 PathClassLoader 用于加载系统的类和应用类
*2 DexClassLoader 用于加载dex文件,jar文件jar包等等。用DexClassLoader加载文件的
2.热修复机制
*1 dexElements数组。
*2 ClassLoader会遍历这个数组。
然后根据crash定位,导到对应的类文件,然后把这个类文件打包成dex文件,修改这个类以后把这个dex文件打包放到dexElements数组最前面,然后再通过类加载器去加载的时候,他就不会加载到处于后面的dex文件,这样就完成了整个热修复的过程。