在Android热修复技术2中,利用动态加载dex实现了热修复,当然这也是一个实现,Tinker也是利用这个原理实现的,但是其中还是会存在兼容性问题的,接下来就会介绍,热修复中存在的兼容性问题
Android热修复的兼容性问题
1 Android N混合编译
在了解Android N(7.0)混合编译之前,首先对Android的编译过程做一些回顾
1.1 Dalvik时代
在Android 5.0之前,Android的虚拟机为Dalvik虚拟机,用于将dex文件转换为系统能够识别的机器码,每次执行这段代码都需要重新转换,效率很低;
因此在2.2版本,Google引入了JIT(即时编译技术),当App运行的时候,当遇到一个新的类的时候会做编译,但是会被优化成一个精简的原生指令码,下次再执行的时候,速度会很快;但是缺点就在于,当App重启的时候,还是会重新JIT
那面对这样的问题,Android在5.0之后,就完全废弃掉了Dalvik虚拟机,进入ART的时代
1.2 ART时代
在Android 5.0之后,ART替代了Dalvik,ART之所以会出现,就是解决Dalvik时代JIT的问题,虽然JIT能够对频繁执行的代码做dex优化