【51CTO.com原创稿件】在WOT2016移动互联网技术峰会上,阿里朱中明老师为我们讲解热修复里面问题。第一讲解热修复的技术,第二讲解HotFix。
热更新和热修复的区别
通常所说的热更新和热部署都是对这个已经发布的客户端代码做一个更新,这里面有一个不同点,热更新强调它是一种实时更新和微小改动,而在热部署里面讲的是在工具链和工程上的完整的更新周期。
拦截技术
因为在热更新里面其实只讲到了两个比较重要的点,第一个就是拦截。这个拦截在业界里面,现在只有三种方面,第一种是类替换,第二种是AOP,第三种是方法直接替换。它在兼容性是最好的,在任何的产品上应该都是能使用的。缺点它主要是以class为单位做更新,因为它不能做某一个具体部分的更新。它其实有两个缺点,第一有一定的性能损失,第二在多数情况下都需要重启的。
拦截器
做java的都知道这个叫AOP。通过AOP的开发,它的性能损失是几乎无损,并且它并不需要做重启。但是它有两个比较大的问题,第一个兼容性不太好,因为它涉及到VM底层的实现。第二这个patch代码是一个专用的代码,这个代码以后不会在你的工程里面有任何的留存,相当于里就是一个补丁,它是一个真正的补丁。
方法替换
方法替换的优点跟拦截器几乎是差不多的。第一个它的力度非常小,导致它的patch包会相对小。第二个在性能上面其实是没有任何损失的。除了第一次把这个子项的地方改进之后,就没有任何的损失。它会有一些缺点,第一个在兼容性上会有一些问题,因为它也会涉及到底层的VM实现。第二同样它在编写的时候是有一些限制的,比如说可能不能改属性,改方法的时候有一些或多或少的限制,包括不能使用放弃所以也会存在这个代码可能有一定的专业有限的可能性,这也算一个缺点。
安全加护的工具
这个工具对我们来说是非常致命的。其实安全加护的工具并不是对代码做的,大部分的安全加护的工具做两块事情,第一个把APK包的结构做了一个变化,第二把一些资源的名字和一些位置做了一些串,主要是增加了一些成本。安全这件事情永远都是一个游戏,这个游戏是循环下去的。并且安全这个东西是非常灰色的。很多人知道它的破解过程非常简单,就是把APK解开,把里面的代码和东西。其实那个代码里面就是有问题的,把所有的签名全部抹掉,重新抹一遍,就会有问题。所以在打这个包之前,是不能用安全加护的。
本文作者:刘晓旭
来源:51CTO