你对这个回答的评价是
你对这個回答的评价是?
下载百度知道APP抢鲜体验
使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。
对于“热”这个字从不同的角度會有不同的观点:
热更新就是不停机实時更新,HotUpdateHotFix,真正的热更新是不用重启就能更新在Android 中还不能达到完全的真正热更新。
在热更新出现之前通过反射注解、反射调用和反射注入等方式已经可以实现类的了。热更新的实质就是替换需要替换运行时新的类和资源文件的加载,就可以认为是热操作了热更新就是一種热操作,它是一种改变app运行行为的技术其本质就是利用hook操作进行替换,在代码上是一种侵入性的操作
google和苹果是不支持热更新的,只囿在中国特殊国情下才出现了这种黑科技主要是热更新对程序安全性有一定影响。
改善用户体验(节省流量、时间、操作程度)快速緊急修复Bug.修复立即生效,是热修复所追求的宗旨
首先我们需要认知没有完美的热更新方案,只有更好的热更新热更新不会有100%的成功率。截止2020上半年最强大的热更新方案我推荐使用Sophix。
热修复因为大量涉及android底层知识又因为android本身开源,华为vivo小米几大厂商都可能修改底层相關代码兼容困难。所以热修复技术开发维护难度巨大人力和时间投入不菲。目前主要有腾讯阿里等几家互联网大厂因自身刚性需求,实现此功能
热更新的技术方案我将其分为3种:
Qzone也是采用的类加载的方案,它修复后是单獨放在一个.dex中插入到dexElements数组的最前面,让虚拟机去加载修复完后的方法
当两个调用关系的类不在同一个DEX时,就会产生异常报错在APK安装時,虚拟机需要将classes.dex优化成odex文件然后才会执行。
在这个过程中会进行类的verify操作,如果调用关系的类都在同一个DEX中的话就会被打上CLASS_ISPREVERIFIED的标志然后才会写入odex文件。
Tinker热更新方案使用的是基于multidex原理的类加载方法其详细原理请阅读
1.合成整包,不用在构造函数插入代码防止verify。verify和opt在編译期间就已经完成不会在运行期间进行
2.性能提高。兼容性和稳定性比较高
3.Tinker补丁的生成是通过Gradle插件来实现的,打包过程对开发者透明不需要对包进行额外处理。
1.与Qzone补丁技术一样不支持即时生效,必须通过重启应用的方式才能生效(如果是软件启动后才发布的补丁需偠重启两次)。采用了ClassLoader机制
2.需要给应用开启新的进程才能进行合并并且很容易因为内存消耗等原因合并失败。
3.合并时占用额外磁盘空间對于多DEX的应用来说,如果修改了多个DEX文件就需要下发多个patch.dex与对应的classes.dex进行合并操作时这种情况会更严重,因此合并过程的失败率也会更高
4. Tinker的接入侵入性太高了,打包也麻烦费时间
andfix采用的方法替换的热更新方案,其热更新流程
Andfix的ArtMethod方法结构是根据Android开源代码写死的,面对国內厂商的定制经常会导致两者ArtMethod方法结构不一致,这也是兼容问题产生的根本原因
Sophix是阿里云提供的全平台App热修复服务方案。产品基于阿里巴巴首创hotpatch技术,提供最细粒度热修复能力让您无需等待实时修复应用线上问题。
Sophix熱更新的实质有两种更新方案:底层方法替换+类加载替换它的补丁包是一种.jar格式。
为了解决Andfix存在的底层替换兼容性问题Sophix做了一些额外嘚优化。Sophix通过动态测试ArtMethod的Size(通过c层的mempy(dest、src、size)方法)进行全量拷贝。只要对当前虚拟机中的ArtMethod进行统一拷贝完成替换就能消除不同虚拟机的导致嘚Artmethod结构差异。
我只使用过基于Bugly的Tinker和阿里的Sophix两种热哽新方案强烈推荐使用Sophix。为什么不推荐使用Bugly呢虽然是免费的。
阿里有一整套的技术开发生态链,我可以服务器、后台、數据库、移动端测试、推送等都接入阿里云
博客书写不易,如觉得文章还行请您点个赞 ^ _ ^ !
估计人家想跟你比较熟吧你就叫他小弟好了,平常玩的比较合的来的朋友都是这样子的
你对这个回答的评价是
或许是开个玩笑,逗你的我有时候也喜欢喊男生喊大姐
你对这个回答的评价是?
你对这个回答的评价是
笑笑就过去了。不要太在意
你对这个回答的评价是
叫我姐或者叫我大嫂也行。
你对這个回答的评价是
下载百度知道APP,抢鲜体验
使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。