拥抱chromium核心的Android WebView

概述

在移动平台上,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还很困难。在开发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

拥抱chromium核心的Android WebView》上有2条评论

  1. 顾怀建

    楼主参与了COS Browser的开发工作的吗?
    “在开发COS Browser时,我们通过桥接/代理模式,也实现了一套UI挂两种内核,但两者的接口相差还是比较大,不是对Content API非常熟悉的,也不太容易使用”

    回复

发表评论

电子邮件地址不会被公开。

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>