下面给android程序员的介绍android热更新方案,热更新的提出源于产品需要快速迭带而又不能经常提示用户更新影响用户体验而出来的一种在不用更新应用的情况下修复bug的解决方案。从方案上来说,主要有Dexposed、AndFix、ClassLoader三种。前两个都是阿里巴巴内部的不同团队给出的解决方案(淘宝和支付宝),后者则来自腾讯的QQ空间团队给出的方案。 Xposed需要获取Root权限,因为它要修改其他应用、系统的行为,而对普通APP来说,不需要root权限。 Xposed通过修改Android Dalvik运行时的Zygote进程,并使用Xposed Bridge来hook方法并注入自己的代码,实现非侵入式的runtime运行。 不支持art,不支持art,不支持art。 通过hook方法的方式,AndFix不像Dexposed从Method入手,而是以Field为切入点,阿里出品。 多个dex的解决方案,把多个dex放进app的classloader之中,从而使得所有dex的类都能被找到。而实际上findClass的过程中,如果出现了重复的类,是会使用第一个找到的类的。 classloader方案就是从这一点出发,只要把需要修复的类修复后,打包到一个单独的dex,通过反射插入到dexElements数组的最前面,让虚拟机加载打完补丁的class。 建议采用ClassLoader方案,因为兼容性比较稳定性。而需要应用不重启就能修复问题的场景,可以使用AndFix。而Dexposed由于还不能支持art,现阶段暂时先放弃,如果开发者们改进使它能支持art模式,那么还是很有吸引力的。Dexposed
AndFix
ClassLoader
总结