:
Android、iOS和Windows Phone平台的对决一直是过去一年行业内的话题。但是手机平台之间市场份额的争夺并不想业内许多人认为的那样具有决定性。
业内一种流行的观点认为:整个市场将不可避免地走向苹果与谷歌双寡头垄断。苹果应用程序商店已经拥有超过40万个应用。Android方面则增长迅速,现在已经有超过25万个应用做基础,预计今年年底就能追上苹果。根据应用商店分析公司Distimo的数据,所有应用商店中近80%的应用被这两个市场巨头控制。市场研究机构高德纳(Gartner)2011年第1季度的数字显示,iOS和Android共同的市场占有率为53%,并且这个数字还在上升。
但双寡头可能受到移动网络和跨平台工具的挑战。HTML5赋予所有其他平台通过浏览器提供应用的能力。VisionMobile最近的开发者经济报告显示,在获得开发者关注度方面,移动互联网(HTML5是其中一个子集)排在Android和iOS平台之后,已经是第三大流行的开发平台。
与此同时,HTML5被炒作过度,那种认为HTML5将取代所有原生应用的想法需要经过现实的检验。与基于HTML5的应用相比,原生应用将会继续提供更为丰富的功能、更好的性能和更高的安全性。quirksmode.org的研究表明,每一个移动WebKit的实现略有不同,这可能导致基于HTML5的应用出现问题。在最近的白皮书中,移动网站和应用程序发布平台Netbiscuits测试了智能手机对HTML5中18个功能的支持,结果发现主流智能手机也只能对其中的一些重要功能提供部分支持,或者根本不支持,实现也是支离破碎。iPhone上可以运行的应用黑莓和三星手机可能就无法运行,反之亦然。或引用信息技术分析公司Forrester在HTML5与原生辩论中的言论:应用和互联网之争仍将继续……两者是无关的。问题不在于是否要在应用和移动网络中选择一个,两者将并存。
跨平台开发工具概览
新类型跨平台工具比纯HTML5更有趣,因为比起基于HTML5的浏览器,它们能够提供更好的性能和功能。这些工具开发出的应用大致被分为两类:
1)网络应用/混合应用。这些应用程序利用网络引擎(“网络浏览器”),通常用HTML / CSS / JavaScript编写。
2)原生应用。这些应用被编译成机器代码,并经常以C++或相似的语言编写。
过去几年来,跨平台工具作为一个新兴的市场,出现了大批活跃的初创公司。下图说明在跨平台工具市场,复杂性和性能之间的不同取舍。
传统网站:左下角为传统网站,性能有限,但在没有增加复杂性的情况下可以访问所有平台。一旦所有浏览器都支持纯HTML5 ,那它也会被归到这个区域。
网络应用/混合应用:图表中与传统网站相邻的是HTML5网络应用,可以下载至浏览器离线运行。它们可以提供更好的性能,但也稍微有些复杂。其中往上一点是运行模拟原生的跨平台工具细分市场。这些工具提供更好的性能,但如果该工具支持多种平台复杂性也会更高。在这里我们发现用HTML5/CCS3和JavaScript编写的网络应用,附带额外的原生元素,一般内置在原生包装中。这些跨平台工具往往会添加原生扩展,以便能访问一些低级别的原生功能。PhoneGap就是这个细分市场中的例子,它通常就被用作与Sencha Touch框架串联。其他运行在PhoneGap顶端的工具还有WorkLight和appMobi。
与细分市场密切相关的是混合工具,它们将HTML5/JavaScript转换成真实的原生源代码。混合工具的例子就有Appcelerator的Titanium。
其他类型的解决方案分为网络主标题/基于Java、Lua、ActionScript或其他不常用语言的混合应用。图表显示了虽然非常复杂,但碎片化严重的Java ME的性能依然低下。跨平台工具Corona SDK和DragonRAD基于Lua。Rhodes基于HTML /Ruby,而OpenPlug使用ActionScript(Flash)作为源代码。Kony使用拖放来开发企业网络应用。关于性能/复杂的取舍,这些解决方案中的大多数都没有可靠的信息,因此上图中的所示并不能代表它们确切的位置。一般情况下,这些工具产生的代码编译或重新编译成原生ARM机器码就会获得较高的性能。
原生应用:第二个主要类别是原生应用。在原生应用跨平台工具中,开发人员经常在C / C + +或C#的同一个代码库中一起工作,然后在半自动移植到目标平台和设备上。原生代码的性能有显著提高,但复杂性也一样。在方面的例子有Airplay、QT和MoSync。Airplay SDK(现在名为Marmalade)起源于3D游戏,但也可以用作一般的C++跨平台工具。Qt是一个跨平台的UI框架,也可用于本机C + +移植。Qt主要支持诺基亚的传统平台。MoSync是一个一般用于C++开发的跨平台工具,集成Eclipse IDE,并在开源(GPL)许可之下。
超越Java的跨平台:原生扩展
跨平台开发的传统方法满足最低要求,Java、Flash Lite和移动HTML都采取这种方法 。这种方法牺牲性能,漂亮界面和访问特定设备的功能。
一种解决办法是添加原生扩展。它们可以为IDE提供额外的IDE SDK/NDK库,并还可以获得访问低级别硬件功能的权限。低级别的硬件功能可以由设备数据库管理。设备数据库控制的条件代码可以在给定的设备上执行。
一些跨平台厂商已经建立了细节层次不同的设备数据库。一个设备数据库包含屏幕尺寸、输入方式和准确的OS版本等信息,此外还有详细的硬件配置和已知错误解决方法。
使用原生扩展,可以克服困扰Java的固有的局限性。不用“编写一次,到处运行”,开发者可以花90%的时间制定一个共同的代码库,再花10%的时间为每个平台和设备加入原生设计模块和扩展。对于软件纯化论者来说,90/10的解决办法可能似乎不是很优雅,但它能够在搭载超过5种操作系统平台的成千上万台设备上应对难以置信的复杂性。利用这种方式,应用开发者可以管理一个代码库,并可以在不丢失功能的情况下将其移植到目标设备。原则上,相比较直接为目标设备开发,使用(C++)附带扩展的跨平台引擎应该能够在损失最小性能的前提下,提供类似的功能。将共同代码库调整后用于100台设备,经济规模显著。
跨平台的颠覆潜力
有迹象表明,平台碎片化将会消失。这不只是Android、iOS和Windows Phone 7,它们有财大气粗的企业巨头支持。市面上还有像QNX(RIM)、WebOS(惠普)、MeeGo(英特尔、中国移动)和Bada(三星)等较小公司的平台。此外还有一些过去遗留下来的平台,至少还将在市面上存在几年时间,包括Windows Mobile、黑莓OS、Symbian、BREW、Java ME和Flash。如果再把主流的桌面平台(Windows、Mac OS、Ubuntu)、游戏机、机顶盒、汽车,和其他电器包括进来,平台数量将难以管理。
应用开发者的客户希望触及整个市场,因此开发者必须面对支持所有平台和设备的艰巨任务。如果他们可以使用一个跨平台引擎,相比较为每种设备设置一个内部开发团队,生产率将获得巨大提高。
跨平台的早期采用者将最有可能成为庞大的消费企业,它们需要针对大众市场,如媒体公司、游戏公司、娱乐公司、银行和任何开发B2C应用的任何品牌。同样,政府机构往往需要提供无差别待遇访问他们服务和跨平台的工具,使他们能够做到这一点。另一批跨平台工具的早期用户是大型企业的首席信息官。他们面临越来越多高管们的要求,他们希望使用自己喜欢的智能手机安全地访问公司的内部数据。一旦这些早期使用者压低价格,并解决好稳定性问题,我们应该会看到跨平台工具在主流应用开发市场获得快速发展。
假设更多开发者迁移至跨平台工具,移动领域的权力分配将受到挑战。目前占据市场的平台和即将上市平台应用数量的差距将会缩短。这将允许较小平台在公平的竞争环境中竞争。
网络应用和HTML5应该会极大地挫伤传统平台的市场力量。当C + +跨平台引擎可以提供的性能和功能,和直接在目标平台上编码相差无几,那它就将成为棺木上的最后一颗钉子。如果跨平台引擎可以完全整合原生平台和设备扩展,那这就将是可能的。在这种情况下,原生应用开发者可能会重新考虑Android,iOS和WP7,选择在一个跨平台IDE上进行编码,而不是具体哪个平台。这样的话,跨平台IDE将变得和原生平台平等,甚至变得十分重要。至少,今天的操作系统平台之争将转移到一个完全不同的水平。