有关Android热更新/热补丁的一种新的解决方案

在Android开发工作中热更新一直是个遗留问题,虽然GooglePlay或者苹果商店的应用审核中都是禁止App这么做的,但仍有大量的开发者想要通过热更新或者热补丁来对已经发布的应用进行更新,而不用重新打包发布一个新的版本,毕竟一个刚发布的应用如果因为一个小bug而让用户再次进行更新,一是用户体验不好,二是发布的过程太过繁琐。 之前也因为热更新的问题做过各种各样的尝试,包括H5,ReactNative,动态加载dex,使用Javascript和java交互等,单都因为各种原因造成不能在生产环境中使用。

方案 问题
H5/H5+ 性能瓶颈在于设备WebView对html和JS的解析效率, 且WebView的加载是异步的,界面初始化时会空白一段时间,尝试使用腾讯TBS以及H5+SDK效果并不理想,尝试使用各种mobileUI框架依然存在卡顿帧数过低等各种不理想的问题。
ReactNative RN是FaceBook提供的一个跨平台的开发框架,使用NodeJs来写JSX和CSS来进行布局和实现业务逻辑,门槛稍高(这不是问题),使用RN实现的Android和iOS应用可用达到和原生应用相媲美的流畅度(也确实是原生的),可以通过从服务器下载js文件来实现热更新,但是如果想要实现原生应用酷炫的效果则是不满足的,且自定义控件的事件传递会被RN容器干扰,RN本来是为iOS而设计的,近期才考虑兼容了Android,对android的支持也还暂时不充足。
动态加载dex 在Dalvik虚拟机下的android环境这个方案是可行的,但是在android4.4之后google发布了新的虚拟机(ART),因ART在app安装过程会对dex的bytecode进行优化并进一步解析成机器码,使得在程序运行期间hook代码变得更有难度,在不能放弃5.0及之后的用户的前提下,这个问题是致命的
Javascript 使用jDK或者webview解析Javascript也能实现一部分的业务逻辑转移,但此方案的局限性太大,不能大规模的使用。

上面这些是我从接触热更新到目前为止所踩过的坑,可以看到暂时是没有任何一个方案是比较完善或者能用在生产环境的。 那么下面,高能来了。

,