代码改变世界

手机跨平台方案介绍

2011-09-02 23:24  狼人:-)  阅读(233)  评论(0编辑  收藏  举报

  引述

  现在手机平台种类繁多,主流平台有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.cnblogs.com/

  个人网站http://loning.wiisio.com/

  本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,否则保留追究法律责任的权利。