WebApp在移动端的涅盘- 另类的移动端应用程序开发
同时欢迎到我的BLOG讨论 : http://pagetalks.com/
江湖有江湖的规矩,大家都知道iPhone上的Cocoa Touch框架和Xcode是开发Apple移动产品的王道。Android SDK和Eclipse是开发Android App的王道⋯⋯你可以找到所有主流平台的开发框架和相关IDE。
你说这做移动端应用的人容易么?虽说Blackberry和Android都是基于Java、有效部分人之前也做过Objective-C,但是想到一个大众产品需要提供每个平台的无差别体验时,你做的可能不是一个项目,而是N个项目。哪天国内某个厂商做了自己的操作系统和SDK,你也得啥啥的多做一个版本。对于财大气粗的公司这些都是无所谓的,可是对于那些可怜兮兮的工程师和项目经理更期望自己的产品生命周期能更长一些、受众应该更广一些——我们需要的是跨平台的解决方案啊!
我们第一个想到的词肯定会是HTML⋯⋯这不是什么新鲜东西,在很多其他嵌入式产品中,例如路由,都是用网页作为用户接口的。将Web App封装到一个应用程序包内进行分发这种概念,是一个很直观的想法。
AListApart上已经有文章在讨论这个问题,但是作者根据自身经验觉得WebApp在需求变得复杂之后不能满足任务⋯⋯汗⋯⋯的确有这样的嫌疑吧。如果单纯使用WebApp再套一个WebView的壳,就没法使用重力感应、GPS、照相机之类的功能。
问题的确如此,但是还是希望还是有的。Phonegap、Titanium、Rhodes、SproutCore Touch这三个跨平台的移动框架虽然依然是一个“壳”,就不仅仅是一个WebView的壳而已。
轻量级的PhoneGap
PhoneGap的是一个非常轻量级的框架,在开发过程中完全不需要使用Java或Ruby之类的代码,而是纯粹的HTML+JS+CSS。只是这里的JS里被赋予了增强型的API,你可以控制Camera、加速器、GPS等等。想了解它的功能,你可以直接看他的文档。
PhoneGap最大的优势就是它真的很轻量很快捷。你能把Web开发流程中的Rapid Prototyping应用到Mobile App的开发之中。
缺点也很明显。由于使用JS作为语言载体,你的效率没法跟Objective-C、Java的比。由于,PhoneGap限定你的程序在一个HTML文件里面,那么App规模越来越大之后,你还能在一个HTML里管理你的App么?最后一种是个这些框架的通病,无法提供完全一致的用户体验。在UI方面,由于无法调用系统默认的UI库,界面完全靠你自己去写,这对用户体验设计是一个灾难。虽然jqTouch之类的框架部分弥补了这方面的缺陷,但是用HTML模拟的控件用起来还是没有系统原生的流畅⋯⋯
更聪明的Titanium
Titanium也是利用HTML、JS、CSS。不过其JS API封装的更强大。
同样是将手机所有功能都封装起来,但是比PhoneGap更完美。但这个是牺牲跨平台性的,Titanium只支持iPhone和Android,现在的Blackberry的支持还是测试阶段⋯⋯不过对于中国手机用户来说,这样的支持性反而更好。
Titanium比PhoneGap对手机的功能封装的更好,前者支持后者不支持的File IO操作(PhoneGap支持不完善)、Contacts读取等等。对于正式的产品开发,选择兼容性更强的PhoneGap还是功能更强大的Titanium,的确是个疑问。
绝对重量级的Rhodes
Rhodes采取的是另一种思路,简单说,Rhodes的框架在App内部架设了一个Client/Server端,开发者写的程序就是其Client端,通过框架的JS API调用“Server”端的“WebService”。Server端再根据得到指令进行操作,Server端本身具有调用平台原生API的使用能力。
其”Server“端使用的是Ruby,那么很多同学可以通过Ruby自己封装平台上的原生API给”Client“端的JS使用。
Rhodes还有相应的云端解决方案,能够解决Mobile App的数据同步等问题。
蓄势待发的SproutCore Touch
今年早些的时候就发布了SproutCore Touch。SproutCore(网站已被hexie)就已经很NB了,YUI、jQuery跟它都不是一个等级的东西,或者就不是同一个概念。SproutCore可以是仅仅借用了JS的语法去定义了一个全新的界面开发环境,并且提供了项目生命周期的一切工具。SproutCore Touch是面向移动端的框架,肯定会在SproutCore的基础上加入移动端的Touch、GPS、Camera相关的API。
可惜这个框架的学习难度特别大,其API的文档和调试环境特别不友好⋯⋯好吧,应该是说,文档比较难找,然后你又要用Ruby来完成开发工具的配置、代码调试等等。另外,这个框架的开发进度好慢的。
但这个框架是基于SproutCore的,潜力太不可小视的。
没有Utopia
现在,我们可以放心的用已有的技术去快速抢占移动端市场了。再加上HTML5在移动平台上的广泛支持,前途看似无限美好。
但是大家不要忘了,现在你的App虽然没有跟平台依赖,但是跟这些框架相关了!从性能上说,程序性能又是跟每个平台上的浏览器有关。Webkit虽然是主流,但是你会发现Android和iPhone的Webkit就很不一样,更不用说每个不同版本的平台之间浏览器的差异了⋯⋯似乎你又回到了桌面浏览器的兼容性大战上。
这些问题在你使用一些HTML5的新特性就特别明显。比如,你会发现iPhone上竟然没有WebWorker。Android上Canvas.toDataURL()方法无法执行等等问题。
看来,Mobile App领域还真是一块处女地⋯⋯