移动跨平台应用开发技术综述
1. 背景
目前市场上主流的移动操作系统,包括iOS,Android,webOS,Symbian,BlackBerry等。如果没有统一的操作系统,开发程序就是一件异常麻烦的事情。
因为每一种手机平台都有自己的SDK,它们需要使用不同语言来进行开发,你可能不得不需要5、6个代码仓库来管理不同设备上的代码,而且需要不同设备的开发人员来开发维护这些仓库,你还不得不装上各个设备的SDK,设置好路径和各种配置信息,来编译不同设备上的应用包。
因此,在移动操作系统已成诸侯割据之势的今天,迫切需要一种真正的跨平台技术。
目前,开发移动程序框架选择很多,从Web App,到PhoneGap,Titanium,MonoTouch,再到Native App。我们认为,可以从以下几方面对这些技术进行比较:
A. 兼容性。能否真正written once, run everywhere。是真正跨平台,还是伪跨平台。
B. 标准化。是否采用国际通用技术实现,是否被不同操作系统完美支持,是否具有较低的开发成本。
C. 性能。能否适应当前主流手机配置。
2. 主流技术简介
2.1 PhoneGap
兼容性:★★★★★ 标准化:★★★★★ 性能:★★☆☆☆
Phonegap采用W3C标准,以HTML5 +CSS3 + JAVASCRIPT作为开发工具。通过JAVASCRIPT封装接口访问移动OS底层API,比如GPS定位、重力感应、短信等,以web app的形式开发业务逻辑,并通过WebView control作为运行时环境,使其作为native app部署到不同移动OS上。
目前phonegap完美支持iOS,Android,webOS,Symbian,BlackBerry,windowsmobile等六种操作系统。同时,Phonegap是免费开源的。
利用phonegap进行跨平台开发,可以有如下几种方式:
A. 编写纯粹的web app,利用phonegap build云端工具转换成各同OS的安装包。这种方式可以完美实现written once, run everywhere。但是,在纯粹的web app中,难以获得OS的底层支持,比如GPS定位、重力感应、短信等。如果不需要这些服务,这种开发方式可谓快捷方便。
B. 将phonegap作为插件支持。如phonegap的get started所述,仍然是利用Xcode开发iOS程序,利用Eclipse开发Android程序,phonegap只是作为开发project的第三方插件,因为这些project本身也是支持一些HTML和JAVASCRIPT的。开发时,利用HTML5+ CSS3 + JAVASCRIPT编写业务逻辑,并通过phonegap封装过的系统JS接口,调用GPS定位、重力感应等服务。个人估计,在不同移动OS间迁移这些project,可以省去90%的代码量。
C. 高端应用,比如3D游戏、多媒体、动画应用。不建议使用phonegap,实际上,所有的跨平台技术都会带来这样那样的问题,虽然理论上也可以开发一些高端应用,但其表现力跟native app是完全无法相提并论的。
Phonegap的最大缺点,运行速度慢,UI反应延时。在HTC G3 528MHz cpu下测试,一个简单的Form提交,速度让人无法接受。
2.2 MonoTouch兼容性:★★☆☆☆ 标准化:★★★★☆ 性能:★★★★☆
Mono项目由Novell公司主持,致力于创建一系列符合标准ECMA (Ecma-334和Ecma-335)的.Net 工具,包括C #编译器和CL执行平台。与微软的.Net不同,Mono项目不仅可以运行于Windows系统内,还可以运行于Linux,FreeBSD,Unix,Mac OS X和Solaris。
MonoTouch是mono的第一个商业版本,是收费软件。MonoTouch最初设计时并没有考虑到跨平台,而是仅仅为iPhone设计的,目前MonoTouch已经更新到4.0版本,而后推出的MonoTouch for Android刚刚发布1.0版本。
包含在MonoTouch中的主要组件是:
l MonoTouch.dll,访问iPhone原生API的C#互操作程序集(基础类、Quartz、CoreAnimation、CoreLocation、MapKit、Addressbook、AudioToolbox、AVFoundation、StoreKit和OpenGL/OpenAL)。
l 命令行SDK,用来编译C#代码和其他CIL语言代码,让它们可运行于iPhone模拟器或iPhone/iPodTouch设备中。
l Mono运行时的商业许可(让你的代码可以使用Mono运行时的静态连接引擎)。
l MonoDevelop插件,让iPhone开发更加简单,并集成了Interface Builder以方便创建GUI应用程序。
从上我们可以看出:
A. MonoTouch采用C#作为主要编程语言,通过运行时SDK保证其运行在不同平台上。类似JAVA JRE。
B. MonoTouch提供一个适配器层,使得开发人员能在程序中使用所有的标准iPhone控件。另外还提供一些原生iPhone API的包装函数库,如访问位置(Location,GPS)、加速计、地址簿等的函数。
C. 开发方式:大部分非UI方面的.NET 3.5功能依旧可用;而UI则需要使用苹果的Interface Builder(界面创建器,IB)应用程序来创建。程序员还是必须使用Mac来进行开发。
D. MonoTouch开发的程序会体积稍大,因为集成了运行时SDK,大约大5M,压缩后3M。
MonoTouch for Android暂未研究,原理应该类似。
2.3 Titanium兼容性:★★★★☆ 标准化:★★★★★ 性能:★★★☆☆
Titanium的原理和phonegap类似,都是利用JAVASCRIPT封装接口访问移动OS底层API,比如GPS定位、重力感应、短信等,以web app的形式开发业务逻辑,并通过WebView control作为运行时环境,使其作为native app部署到不同移动OS上。
Titanium和phonegap的不同之处主要有以下几点:
A. UI控件。Phonegap没有提供丰富的UI控件,如果要开发效果华丽的组件及特效,需要额外的web框架支持,比如sencha touch、jQuery mobile等。而Titanium本身就提供了一些UI API,使得直接用Titanium编写的程序也具有一定美化效果。
B. 跨平台。上文提到,Phonegap支持六种主流移动OS,而Titanium目前只支持iOS和Android。
C. 性能。暂未测试,但是Phonegap + sencha touch效果实在太差,Titanium应该会好一点。
2.4 Rhodesto be continued...