前言

Web技术的优势早已被广大应用开发者熟知,比如可与云服务轻松集成,基于响应式UI设计的精美布局,高度的开放性,跨平台能力, 高效的分发与部署等等。伴随着移动互联网的快速发展与HTML5技术的逐步成熟,Web应用已经成为移动端跨平台应用开发的热门解决方案。然而要在移动端充分利用Web技术的优势,仍然有许多障碍。

Crosswalk作为一款开源的web引擎,正是为了跨越这些障碍而生。目前Crosswalk正式支持的移动操作系统包括Android和Tizen,在Android 4.0及以上的系统中使用Crosswalk的Web应用程序在HTML5方面可以有一致的体验,同时和系统的整合交互方面(比如启动画面、权限管理、应用切换、社交分享等等)可以做到类似原生应用。现在Crosswalk已经成为众多知名HTML5平台和应用的推荐引擎,包括Google MobileChrome App、Intel XDK、Famo.us和Construct2等等,未来的Cordova 4.0也计划集成Crosswalk。同时在今年的中国iWeb大会上,Cocos2d-html5游戏引擎也宣布与Crosswalk展开合作。

Crosswalk有何优势?

Crosswalk采用Chromium内核并不断地快速演进(六周一次更新),使基于Crosswalk的Web应用充分享有Chromium的功能与性能优势,以及较好的平台一致性。同时,Crosswalk支持最新的HTML5 API,包括WebGL,WebAudio,WebRTC,Gamepad,WebSocket等等。一个展示基于Crosswalk的web应用的很好的例子是这款名为HexGL的3D游戏,我们在原有游戏(http://hexgl.bkcore.com)基础上做了一些改进(https://github.com/hmin/HexGL),如图1所示。它是一款用纯web技术开发的游戏,使用了WebGL,WebAudio,Gamepad,Presentation等HTML5 API,支持4.0之后的所有Andorid平台,并且在低端的Android设备上也能流畅运行,诸如红米手机


图示:HexGL游戏演示

如果Crosswalk提供的API不能满足需求,还支持通过编写原生的Java代码来创建新的Web API。通过这种扩展机制用户可以轻松地获得他们所需的平台和设备能力。如果开发者不想自己动手而是利用已有的一些扩展API的实现,Crosswalk也支持与Cordova的整合,后者已有大量的成熟的API实现供开发者使用。稍后我们更会详细的解释。

Crosswalk允许Web开发者将他们的应用打包成系统的应用安装包(如:Android上的APK),获得与本地应用一致的体验。Crosswalk也支持多个应用同时使用一个Crosswalk库的共享模式,仅当应用第一次启动并且发现系统还没有相应的Crosswalk库时才提示用户下载安装。目前是大多数情况下开发者将Crosswalk直接嵌入到应用本身。在这种嵌入模式下Web应用开发者可以完全控制Crosswalk的更新。

同时,Crosswalk在不断试验各种Web前沿的功能,并积极地反馈与影响标准(W3C)的制定。更重要的是,Crosswalk确保这些被标准化的功能解决了现实的问题并帮助开发者创造更具吸引力的应用与用户体验。HexGL游戏中使用的Presentation API就是这些实验性功能的一个典范。它由英特尔向标准化组织提出,并在Crosswalk中最早实现。使用Presentation API的Web应用可以将网页内容以无线连接的方式显示在其它的屏幕上。例如,在HexGL游戏中用户可以使用一块大屏幕显示游戏的场景,并用一块小触摸屏来控制游戏。

Crosswalk与WebView的不同

WebView组件,如iOS的UIWebview、Android的Webview等,作为系统自带Web引擎,在HTML5能力上相比Safarifor iOS、Chrome for Android都要差一截。另外在Android平台上,由于系统碎片化比较严重,不同Android版本的Webview的HTML5能力也有较大差异,导致相应的HTML5应用一致性难以保证。而Crosswalk,如前文所述,作为第三方的独立引擎有较好的HTML5功能和性能支持,较好的平台一致性,以及近似原生应用的系统整合体验。当然这样导致的缺点则是开发者需要将Crosswalk与应用程序一起打包,生成的应用大小会更大。因此Crosswalk提供了共享模式来减少应用的大小。同时Crosswalk一直在模块化与定制化方面不断努力,尽量缩减应用的大小。

有人可能会问,Android WebView自Android 4.4起已经采用了Chromium内核,这与 Crosswalk有和不同?基于Chromium内核的WebView(Chrome WebView)和Crosswalk比起来目前存在两大缺陷:一是不被4.4之前的Android支持;二是性能以及功能与Crosswalk还有较大差别。主要的原因是Chrome WebView要向前兼容基于Android 4.4之前的WebView的应用。这意味着Chrome WebView要支持许多旧的功能,所以架构设计更为复杂, 从而导致部分功能还没有完善,同时在某些情况下会降低性能。目前Chrome WebView的Canvas的性能所受影响最大,WebGL的性能与Crosswalk比也有所差距。由于Crosswalk不需要保持这种兼容性,它可以采用与Chrome浏览器非常相近的设计, 事实上Crosswalk正是构建于Chromium的content模块之上,这使得它速度飞快并易于扩展与维护。同时还有相应的增强 ,比如Web应用不需要采用多进程架构, 这样运行时内存可以更加节省,等等。

Crosswalk与Cordova

Cordova(PhoneGap),作为第三方的HTML5应用开发框架工具的代表,极大促进了HTML5应用的发展。它提供了方便的跨平台应用打包/发布服务、实用的API、灵活的扩展机制、以及积累下来的丰富的第三方API实现。然而Cordova使用的web引擎是系统的WebView。如果开发者正在使用Cordova并且渴望更好的性能和更新的功能,如WebGL,那么Crosswalk是一个很好的选择。Crosswalk支持开发者在Cordova中用Crosswalk替换原生的Android WebView,并将两者完美的融合。当然,它仍然支持Crodova的扩展机制,不过如果web应用对扩展的性能要求较高, 采用Crosswalk自带的扩展机制是更好的选择。

目前Crosswalk采用提供定制过的Cordova开发包来支持Cordova中Crosswalk引擎的使用。不过Crodova项目本身也在改进架构以便引入诸如Crosswalk一样的第三方的web引擎,到那时开发者就可以更加灵活自如地在Cordova使用Crosswalk了。

打包基于Crosswalk的web应用

目前Crosswalk支持ARM与X86两种架构,用户在打包时可以自由地选择支持其中一种或全部架构。同时Crosswalk支持多种方式打包基于Crosswalk的应用。一种方式是Crosswalk的自带打包工具链,在这种方式下用户只需为web应用额外写个配置文件并运行一条打包命令即可完成打包。另外一种方式是使用Intel XDK,Crosswalk已经是XDK支持的web引擎之一,在用XDK打包的时候只需选择用Crosswalk打包即可。还有一种方式是我们前文所说的Cordova,开发者无论使用Cordova的CLI(CommandLine Interface),还是ADT(Android Development Tool),都可以打包基于Crosswalk的web应用。

Crosswalk也提供一种嵌入模式。在这种模式下Crosswalk支持一组类似于WebView的API,称之为XWalkView。通过嵌入XWalkView开发者可以在原生的Android应用中访问网页或运行web应用,如同使用WebView一样。当你的应用中有大量的java代码,但又想用web技术来写UI,这时我们推荐你使用Crosswalk的嵌入模式。在这种嵌入模式下,用户开发的是一种混合型的应用,打包方式上与系统原生的应用没有差别。

总结

Crosswalk发布至今只有不到一年的时间,但是Crosswalk作为一款基于Chromium内核的web引擎,以其在移动平台上的功能、性能、系统整合体验、API扩展以及支持Cordova等优势。截止至2014年8月份仅在Google Play上已发现的基于Crosswalk的web应用数量已有380多款,其中百万级下载量的应用有2款。因为统计范围有限,我们相信Crosswalk实际使用量不仅于此,更重要的是Crosswalk的使用量仍在持续增长。在Crosswalk的邮件列表以及各类技术网站论坛中,如StackOverFlow,Construct2等等,几乎每天都开发者提出各种问题或给予我们反馈。这些让我们更加相信我们我们走在正确的道路上,今后Crosswalk仍将不断地创新与演进,推动移动端的web应用的发展!

作者介绍:WebKit项目Committer, Chromium项目Committer,2011加入英特尔亚太研发有限公司,任开源技术中心的软件工程师,参与过多个浏览器与Web引擎项目。目前主要致力于移动端开源Web引擎Crosswalk在Android平台上的研发。

一篇文章读懂开源web引擎Crosswalk-《转载》的更多相关文章

  1. 一篇文章读懂JSON

    什么是json? W3C JSON定义修改版: JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式,并不是 ...

  2. 一篇文章读懂Java类加载器

    Java类加载器算是一个老生常谈的问题,大多Java工程师也都对其中的知识点倒背如流,最近在看源码的时候发现有一些细节的地方理解还是比较模糊,正好写一篇文章梳理一下. 关于Java类加载器的知识,网上 ...

  3. 大数据笔记(三十)——一篇文章读懂SparkSQL

    Spark SQL:类似Hive ======================================================= 一.Spark SQL基础 1.什么是Spark SQ ...

  4. Java枚举类与注解详解——一篇文章读懂枚举类与注解详

    目录 一.枚举类 ① 自定义枚举类 ② enum关键字定义枚举类 ③ enum 枚举类的方法 ④ enum 枚举类实现接口 二.注解 ① 生成文档相关注解 ②注解在编译时进行格式检查 ③注解跟踪代码的 ...

  5. 一篇文章读懂HTTPS及其背后的加密原理

    HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.本文,就来深入介绍下其原理. 1 ...

  6. 【转】一篇文章读懂人力资源三支柱体系(COE・BP・SSC)

    通过人力资源转型,提升效率和效能   作者:Sharon Li,翰威特大中华区咨询总监. 杰克韦尔奇曾说过“人力资源负责人在任何企业中都应该是第二号人物”,但在中国,99%的企业都做不到.原因很简单, ...

  7. 《一篇文章读懂HTTPS及其背后的加密原理》阅读笔记

    HTTPS(Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.这篇文章深入介绍了它的原理. 当我们适用 ...

  8. 一篇文章看懂JS闭包,都要2020年了,你怎么能还不懂闭包?

     壹 ❀ 引 我觉得每一位JavaScript工作者都无法避免与闭包打交道,就算在实际开发中不使用但面试中被问及也是常态了.就我而言对于闭包的理解仅止步于一些概念,看到相关代码我知道这是个闭包,但闭包 ...

  9. 一篇文章搞懂高级程序员、架构师、技术总监、CTO从薪资到技能的区别

    一篇文章搞懂高级程序员.架构师.技术总监.CTO从薪资到技能的区别 http://youzhixueyuan.com/senior-programmers-architects-technical-d ...

随机推荐

  1. bzoj4035【HAOI2015】数组游戏

    题目描述 有一个长度为N的数组,甲乙两人在上面进行这样一个游戏:首先,数组上有一些格子是白的,有一些是黑的.然 后两人轮流进行操作.每次操作选择一个白色的格子,假设它的下标为x.接着,选择一个大小在1 ...

  2. MVC使用jQuery从视图向控制器传递Model的2种方法

    http://blog.csdn.net/make1828/article/details/29846003 using System.ComponentModel.DataAnnotations; ...

  3. 解决Pytohn安装第三方库出现read timed out 问题

    输入pip --default-timeout=100 install -U Packages 如pip --default-timeout=100 install -U Pillow

  4. Go_13:Go常用功能总结一阶段

    1. go语言从键盘获取输入内容 <1. 最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数.请看以下程序: package main import "fmt& ...

  5. SpringMVC之@RequestParam @RequestBody @RequestHeader 等详解

    转自:http://blog.csdn.net/kobejayandy/article/details/12690161?reload 简介: handler method 参数绑定常用的注解,我们根 ...

  6. VS2015调用matlab Plot函数

    最近经常采用Matlab仿真,然后C语言实现,最后需要将计算结果使用Qt的qwt或者matlab中的plot函数绘图. 因此想借用matlab的plot函数接口,使用VS2015来编写信号处理代码,最 ...

  7. 转:EasyJSWebView

    EasyJSWebView 是类似 Android  javascriptInterface 的 uiwebview js 调用原生代码框架 示例代码: 先建一个MyJSInterface接口 @in ...

  8. UITableViewCell的separatorInset属性

    separatorInset这个属性是IOS7后才有的属性,所以需要判断一下,才能修改 if (IOS7_OR_LATER) { cell.separatorInset = UIEdgeInsetsZ ...

  9. Shell记录-Shell脚本基础(五)

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  10. [IOI2011]Race

    2599: [IOI2011]Race Time Limit: 70 Sec  Memory Limit: 128 MBhttp://www.lydsy.com/JudgeOnline/problem ...