Chromium on Android: 认识Chromium WebView

发布时间:2020-08-01 22:33:19 作者:automin
来源:网络 阅读:3609

Android KitKat一项重要的更新就是WebView采用Chromium/Blink渲染引擎,本文简要的叙述了新版WebView的主要特性、需要进一步改进的地方以及WebView的代码结构等。

WebView前世今生

WebView是Android平台上一个非常重要的系统组件,用于将一个显示Web页面的窗口部件view嵌入到应用程序,并提供了一组API接口允许开发者定制页面加载和绘制的行为,比如响应页面加载状态的变化和弹出JavaScript对话框的请求等等。自Android 1.0发布以来,WebView被广泛地使用在应用程序中,最典型的当属Stock浏览器了,它就是基于WebView开发的一个浏览器程序。关于详尽的文档描述,请参看WebView的官方文档。 

早期的WebView (在Android 4.4以前)是基于WebKit实现的,可以简单理解为直接在WebKit代码库中增加一个分支,解决Android平台特定的页面渲染方式以及通过JNI接口将WebKit的功能桥接为Java层的API接口。在图形方面,WebView和Android平台一样,采用的是Skia图形库,但没有启用硬件加速,渲染性能非常不好,这也是许多使用者经常抱怨的诟病之一。 

随着Android 4.4 (KitKat) 平台的发布,基于Chromium开源项目的WebView成为KitKat平台的一大亮点。新版WebView采用了与Chrome浏览器相同的Blink渲染引擎,v8 JavaScript引擎,网络库以及内存分配器,在HTML5特性支持方面不仅与Chrome保持了更高的一致性,而且还弥补了旧版WebView在渲染性能方面的不足。Android平台上所有使用WebView的应用程序都将无缝透明地受益于新版WebView的特性支持和性能提升。

目前,Android KitKat上的WebView是基于Chromium 30.0.0.0,而Chromium开源项目一直以6周一次的迭代周期在快速演进,Google官方并没有给出一个明确的计划什么时候以什么方式升级WebView组件,也许是通过GMS,但尽管如此,就目前的情形来看,新版WebView只能在Android 4.4系统上使用。这就意味着目前市面大量Android 4.3或以前的设备都不能使用新版的WebView,享用不到新版WebView引入的好处。为什么其他非4.4的设备上不能使用呢?原因主要是Chromium WebView必须与AOSP (Android Open Source Project) 源代码一起才能编译,不能单独从Chromium的代码库中编译一个可以独立安装的软件包。

主要特性

不足之处

更新:最新的Chromium WebView,已经添加了WebGL,WebRTC以及加速Canvas 2D的支持了。

代码结构

确切地说,在AOSP中WebView是由三部分代码组成:

Chromium on Android: 认识Chromium WebView

从AOSP中编译WebView

如果编译一个完整版的WebView,需要先要下载整个AOSP的代码,运行source build/envsetup.sh和lunch <target>命令后,进入framework/webview目录执行mm –j8编译WebView模块,最后在out目前将会得到libchromiumwebview.so和libwebkit_plat_support.so两个动态链接库,将这两个so文件拷贝到目标设备的/system/lib目录下,重启设备后就可以使用你自己编译的WebView了。

 从Chromium中编译WebView

实际上,也从直接从Chromium代码库中编译WebView,但这个WebView并不是一个完整的WebView。前面说到,WebView还包括了Android平台支撑代码,而Chromium代码库并没有包含这部分代码,所以编译出来的WebView只有纯软件的渲染模式。因此,它对帮助验证一个WebView功能性方面的问题还有有用的,对于优化渲染性能只能从AOSP编译了。

根据chromium.org官方文档,下载chromium代码库,配置好环境后运行:

$ . build/android/envsetup.sh
$ android_gyp
$ ninja –C out/Release android_webview_apk

编译成功后,在out/Release/apks目录中会有一个名为AndroidWebView.apk的文件生成,它是一个Shell程序,提供了一个简单的UI,方便开发者验证WebView的核心功能,但AndroieWebView.apk并没有直接使用android.webkit.WebView,而是基于WebView的核心类AwContents实现的,查看manifest文件你会发现它将android:hardwareAccelerated设置为false了,也就是说应用程序没有开启硬件加速,相应地WebView也只是工作在软件渲染模式下。如果强制把android:hardwareAccelerated设置为true,这个Shell程序则不能正常显示网页了,这是意料之中的,硬件加速渲染模式必须要与AOSP一起编译才会有。

参考资源

[1] WebView SDK,http://developer.android.com/reference/android/webkit/WebView.html

[2] Web程序的迁移,http://developer.android.com/guide/webapps/migrating.html

[3] WebView for Android, https://developers.google.com/chrome/mobile/docs/webview

[4] 远程调试 for Android, https://developers.google.com/chrome-developer-tools/docs/remote-debugging

[5] Android上编译Chromium, https://code.google.com/p/chromium/wiki/AndroidBuildInstructions


推荐阅读:
  1. Chromium on Android: Chromium线程局部存储系统
  2. 怎么在python中利用Scrapy实现一个定时爬虫功能

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

chromium webview mi

上一篇:Azure Redis 系列之 Azure Redis部署

下一篇:IGNITE TROUBLESHOOT

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》