月度归档:2013年05月

拥抱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这篇文章中,分析了其实现结构:

enter image description here

可以看到,在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即将来袭?

在android 4.0发布之前,就有传闻chrome即将成为android的内置浏览器。Android 4.0发布后,证实只是采用了chromium的部分代码,主体还是WebKit for Android。以google的实力,将chrome搬到android是轻而易举的,随后发布的chrome for android就证明了这一点。但google没有这么快替换系统内置浏览器,主要原因还在于API兼容。在WebView API没有完全替代方案之前,Android默认web引擎是不会替换掉的。几个月前开始,chromium代码库开始出现了android_webview,这个项目就是要在chromium的基础上封装出和原来的WebView API完全兼容的API。

随着chromium的快速更新,android_webview下面的代码越来越完善了。五一在家研究了一番,发现已经可以build出AndroidWebView.apk,经过简单的修改后,已经可以加载网页,渲染网页了,但缺少事件处理。您可以从这里下载测试APK。程序界面如下图所示:

chromium_android_webview

从代码中可以得出如下信息:

1、运行在单进程模式下

2、同时支持软件渲染和硬件加速渲染(目前AndroidWebView走的是软件渲染路径)

Android WebView做这样的选择是有道理的,毕竟android硬件环境参差不齐。多进程支持/GPU渲染可以留给各厂商自行优化。本次的Google I/O即将开幕了,Android 5.0是否会闪亮登场呢?chrome是否成为android内置浏览器呢?让我们拭目以待吧。

如果您对chromium android WebView有兴趣,敬请关注开源项目:https://github.com/mogoweb/chromium_webview