概述
在移动平台上,Web APP和Native APP之争由来已久。在Apple AppStore取得巨大成功的今天,许多人开始看衰Web APP。但Web APP确实有着自己的优点,看看现在PC上页游的流行就可以知道,Web APP还是有存在的理由的。在Web APP和Native APP之争的同时,出现了第三种形态的APP,通常称之为混合应用程序(Hybrid App),即结合了HTML5和传统应用程序特征的一类应用程序。
开发混合应用程序(Hybrid App)的人员一定对Android SDK中的android.webkit.WebView这个类不陌生。它是一个View类,主要用途是用来渲染网页。得益于良好的封装,WebView屏蔽了底层webkit复杂的细节,应用程序只需要寥寥几行代码,就可以为应用程序增加HTML支持,为Hybrid App开发提供了强力支持。但Android WebView对HTML5的支持很差,性能也不行,直到Android 4.1,才有所改善。
如果能够将chromium嵌入到APP中作为Web Engine,Hybrid App开发无疑可以如虎添翼,所以国外的大拿整出来一个Chromium Embedded Framework,在此基础上,还引出了很多扩展项目,将这套框架搬到不同的语言。但目前还没有android的移植,而且这套Framework和android WebView API相差比较大,所以目前在Android APP中嵌入chromium还很困难。在开发COS Browser时,我们通过桥接/代理模式,也实现了一套UI挂两种内核,但两者的接口相差还是比较大,不是对Content API非常熟悉的,也不太容易使用。
chromium android_webview子项目
2013年4月,google放出重磅消息,退出WebKit项目,创建自己的渲染引擎Blink。作为Android Frameworks的WebKit for android,自然也会转向Blink(不知道为什么,webkit android移植代码一直没有upstream到webkit版本库)。但做为系统级的frameworks,要考虑到向后兼容,API是不能随便乱动的。其实在好几个月前,chromium代码库中就出现了android_webview这个目录,google早就有基于chromium打造新的WebView API的计划了。
在基于Chromium内核的Android WebView这篇文章中,分析了其实现结构:
可以看到,在ContentAPI之上,Chromium的WebView实现封装了一个新的模块AwContents,但这并非最终的WebView API,还需要一层桥接部分,将AwContents桥接到WebView,这就是图中的桥接模块,该模块位于Android源代码中,目前没有开源。这边没有开源,那边有人按奈不住了,整了一个开源ChromeView,实现这个桥接代码,有兴趣的可以看看。
参考资料:
1. WebKit和Blink
2. 基于Chromium内核的Android WebView
3. ChromeView project. https://github.com/pwnall/chromeview
这个ChromeView 目前稳定吗?可以作为产品级来使用吗? 从WebView换成ChromeView,好换吗?