引述
现在手机平台种类繁多,主流平台有Symbian、IOS、Android、WM6.5、WP7以及中国山寨机所普遍使用的MTK,展讯, MSTAR。
作为开发者来说,特别是学生,要做一款软件支持如上平台,实在是一件遥不可及的事情。
不同种类的应用,成功的条件是不同的。有些应用是以质取胜的,有些应用则在质的同时必须要有足够的用户群(如LBS应用相关),也就是量的优势。因此,不同应用对于多平台支持的需求是有差异的,这也是本文探讨如何跨平台开发的价值所在。
跨平台开发有许多种方式,在文献中可查到有下列方式。
方案名称 |
简述 |
特点 |
性能 |
方案开发难度 |
使用难度 |
使用成本 |
案例 |
动态脚本 |
使用脚本语言进行动态载入或对特定的数据格式进行解析,类似于浏览器工作方式: wml javascript xml表单 私有数据格式 |
开发快,灵活配置。性能差,表现形式有限 |
30 |
40 |
30 |
40 |
msn/fetion/qq 内置wap浏览器使用服务器把网页转换成wml,客户端进行解析展示。 移动MM使用xml进行界面定义 微软oneapp 使用 java script进行服务武器编写,客户端进行展示和交互 很多电子阅读软件都使用自有的格式在服务器端进行编写,客户端进行展示 |
私有跨平台 |
公司内部使用,进行很"粗略"的封装 |
使用范围受限 |
90 |
120 |
70 |
60 |
不公开的内部引擎,比如Gameloft的游戏引擎 很多公司的UI引擎 针对特殊的领域,比如Poc(按键通话对讲机)引擎 |
抽象中间件 |
有自己的编程标准,完善的文档和规范化的接口 |
学习成本高,使用平台所限,在不损失性能得前提下解决特定的问题 |
85 |
300 |
100~150 |
50 |
Nokia的Qt 沃勤的 mtk中间件 Brew 开发接口 |
虚拟机 |
使用字节码解析执行 |
开发容易,跨平台性好,但性能差,扩展难,维护成本高 |
50 |
有开源方案,自己开发成本很高 |
60 |
60 |
标准的j2me虚拟机 开源的llvm, eve, flash最新版使用llvm 私有的,掌上明珠自己开发了虚拟机用于开发游戏 |
代码转换 |
使用java转换成c代码,再编译执行 |
使用标准j2me接口开发,一份代码,好维护,但目前还没官方公开版 |
84 |
300 |
60 |
70 |
棱镜方案 Fetion 3.0 正在开发的联通应用商店 目前都还是公司内部使用 |
备注:
性能:我们以纯本地代码开发出来的程序性能为100做基数,其他使用相对百分比。
难度:我们以纯本地代码开发的难度100做基数,其他使用相对百分比。
棱镜方案由北京创世互动总经理张盛毅介绍,目前仅在北京创世互动公司内部使用,期待尽快与众多开发者见面。
(1)
我们可以看到,使用动态脚本、虚拟机及代码转换等方式是比较廉价的跨平台开发方式。接下来本文将会介绍几种跨平台方式下进行跨平台开发的方案。
动态脚本
现在比较火的使用动态脚本的跨平台开发方案大部分是即基于HTML5的。事实上即对传统浏览器的一种扩展,提供了离线浏览功能、对本地设备的访问功能等。但由于大部分编码是使用脚本语言,因此性能较低。如果做图片处理等应用,则缺少相应成熟库支持。
RhoMobile - one codebase, every smartphone
基于HTML5及Ruby构建跨平台应用的工具,号称支持iPhone, Windows Mobile, RIM, Symbian and Android。同时提供开发、同步、源码管理等全方位产品。具有IDE。
然而,当仔细看开发文档的时候,发现对Symbian提都不提了,实在是一件让我的N95伤心的事情(http://docs.rhomobile.com/rhodes/introduction)。况且作者对Ruby了解甚少,也就没有进一步尝试。
Appcelerator
Appcelerator的Titanium是使用HTML、JavaScript及CSS等Web技术构建移动(iPhone、Android及iPad)与桌面(Windows、OS X及Linux)应用的平台。此外,还可以使用Python、PHP及Ruby构建Titanium的桌面应用。这些应用还可以交叉编译到所有的目标平台上。
(2)
PhoneGap
PhoneGap是一款开源的手机应用开发平台,它仅仅只用HTML和JavaScript语言就可以制作出能在多个移动设备上运行的应用。PhoneGap将移动设备本身提供的复杂的API进行了抽象和简化,提供了一系列丰富的API供开发者调用,只要你会HTML和Javascript或者Java语言,就可以利用PhoneGap提供的API去调用各种功能,PhoneGap就能让你可以制作出在各种手机平台上运行的应用,这对移动应用开发者来说无疑是个福音。
(3)
这个对Symbian的支持也很不好,官方的Symbian demo在我的N95上无法跑。
代码转换
由于代码转换直接生成目标平台的应用程序,因此效率比较高。然而如引文中提到的,大部分项目都是私有的。
MoSync
MoSync是一个开源的C/C++的集成开发环境。可以简化移动开发程序的开发难度,并且能够大大提高移动程序开发人员的工作效率。其主要优点:开源,跨平台android, j2me, Symbian等,易于移植。
(4)
官方的DEMO很成功的在我的手机上跑了起来,还有几个是OPENGL的。不过极其不爽的是,对中文的支持性很糟糕。MoSync所提供的UI系统压根没考虑对中文的支持,有国人问如何显示中文,MoSync的回复让我感到很雷,要制作一个一个byte的中文字符字体。难道他们以为汉字是拼音么。
不过MoSync正在做native ui的相关工作,不过,恐怕还需要相当长的时间来发展。
虚拟机
我认为虚拟机其实是很尴尬的,对多平台的支持远不如上文提到的几个强悍,编码过程中要考虑的也比较多。
J2ME
iPhone压根不支持。Android则自己搞了套,估计合理利用设计模式,改动也不需要太大。Symbian还是对这个很友好的,WM6.5要装虚拟机,WP7未知。
在编码过程中,由于J2ME也没有为多种设备提供一个十分统一的访问方式(如加速度传感器等),所以需要考虑的事情也比较多。
Silverlight、MonoDroid、 MonoTouch
这个就压根谈不上跨平台了,UI都是要各自写一套,而且后两者也特别臃肿。
值得一提的是,有个基于C#的游戏引擎delta engine,可以在PC、WP7、Android及iPhone上跑。
Skyengine
这里介绍一下这个,其实也是最近斯凯的老大宋涛来我们天大才听说的。之前对山寨机一直没有关注过。
斯凯SDK处理了MTK、展讯、MSTAR平台的差异性,封装了统一、易用、功能强大的API。 功能涵盖了图形文字处理,声音,文件IO, 网络通信等;同时完美支持THUMB指令,插件机制, 图形加速等高级特性。 斯凯SDK将使你轻松开发出优秀的OTA应用。
开完会后过去聊,说已经放出Android的来了,但是后来在斯凯的网站找也没找到。估计还在内部测试,不过如果要做山寨机的平台的话,可能用这个会速度好多。
小结
扯这么多,最后也没扯出个真正的Write once,run anywhere的巨无霸。开发过程中,应该有机的选择几种跨平台技术,覆盖自己所关注的平台。
我们的团队近期在做一些个项目,也还在讨论跨平台的方案。我们还是比较关注手机程序的Native特性的。譬如Symbian用户更喜欢sis,而不喜欢jar。
总而言之,跨平台远没想象中的那样靠谱。
引用作品
1. 一尘. 手机跨平台开发五大方案对比. 博客园. [链接] http://www.cnblogs.com/wmj/archive/2010/11/29/1891086.html.
2. InfoQ. Aptana被Appcelerator收购. [链接] http://www.infoq.com/cn/news/2011/01/aptana-appcelerator.
3. 跨平台开发:初探PhoneGap移动开发框架. [链接] http://mobile.51cto.com/android-229213.htm.
4. liuhuigx. MoSync: 跨多平台android, j2me, Symbian, wm的开发工具。. [链接] http://www.iteye.com/topic/600808.
作者:马昊伯
个人网站: http://loning.wiisio.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,否则保留追究法律责任的权利。