跨平台的移动开发框架介绍
这里说的框架,英文原文是Framework。因为最近在寻找合适的手机游戏引擎,所以对比了一些开源以及商业框架,包括他们的部分文档,以及论坛和博客里开发者的使用分享,有了一点简单的收获,记录一下。
每种框架都有其特定的用户群定位,所以不好说哪个框架或者引擎最好,只能是根据应用开发的功能需求以及开发者个人对工具及语言方面的喜好来进行选择,有一些框架目前不会使用,但不代表未来在做某个应用的时候再回来重新评估。
不过其中一些框架的缺陷还是值得关注,不能在使用这个框架做过一段时间后才发现有这样那样太多的问题,解决的时间比自己为每个平台独立开发所花的时间还要多,那样就得不偿失了。
因为上一个项目使用的Unity3D(http://www.unity3d.com/),目前的感受是这个引擎相当不错,尤其对于美术人员来说相当友好,其在跨平台方面的表现也很强大,虽然手机平台目前只支持iOS跟Android,不过这也足够了,Unity现在50万的开发者也足以证明它的优秀,而围绕它的一些插件开发商和工具开发商,还有大量的Asset提供者,已经将Unity打造成了一个产业圈。
只不过Unity的强项还是在3D游戏开发上,虽然使用其UI组件也可以构建2D游戏,但是使用起来还是比较别扭,也不那么直观。
另外一个非常优秀的框架Cocos2d(http://www.cocos2d-iphone.org/),这个真的只能算是框架,因为它只是一套API集合,不像Unity那样有完善的开发工具,而且Cocos2d只能发布到iOS平台和Mac平台下,如果需要跨平台可以使用国人移植的Cocos2d-X项目。
看一眼Cocos2d网站的项目列表真的是很让人激动,那么多曾经排过Top10的项目,似乎有了它成功就在眼前。Cocos2d是我很早就一直在关注的一个框架,并且尝试用它来写过简单的游戏,确实很不错。
不过Cocos2d最大的问题在于工具的缺失,使用它必须完全由程序员自己来实现场景构建,动画控制,等等。当然也可以借助于Tiled这类开源工具来编辑地图,但其功能与Unity比起来只能用简陋来形容,这对于多人协作,尤其是程序与美术的协作是相当不友好的。
当然,如果你能一个人搞定所有这些事那也无所谓。
Sparrow Framework(http://www.sparrow-framework.org),与Cocos2d类似的一个游戏开发框架。Sparrow不是跨平台的开发框架,它只支持iOS。因为提供了一套与Flash/Flex类似的API接口,所以对于有flash开发经验的人员来说还是有一定优势的。不过同样也是工具的缺失,使用起来有一定难度。
Torque 2d(http://www.garagegames.com/products/torque-2d)是一个比较老牌的游戏引擎,包含有比较完整的开发工具,其Level Editor跟Unity一样也是所见即所得,对于横版过关类游戏及斜45度地图游戏都有很好的支持,使用了一套自己实现的脚本引擎,类C++的语法,使用起来也比较清晰。
它的一个分支iTouque-2d可以把应用发布到iOS平台,不过目前还不支持发布到Android,这应该算是Torque目前最大的问题了。
Corona SDK(http://www.anscamobile.com/corona/),差不多与Cocos2d齐名的另一个优秀的框架,在早期Apple对第三方语言开发App还严格禁止的时候这个工具就已经出现了,我关注到这个框架的时候正逢Apple开始解禁第三方编程语言,那时候Corona还在做低价促销,可惜当时我没有购买 J。
同样的,看一眼Corona SDK的Showcase列表也会热血沸腾,这么多优秀的App,不过问题也还是有的:
没有集成开发环境,必须自己使用lua语言一行行写出一个App来。
Android的支持还非常不完善,Corona基本上也是在iOS做的比较成熟后再移植到Android上的,这个移植工作还处于非常初期的阶段,所以不要指望它在Android上的表现能有多好,能够正常运行就不错了。
最大的一个问题是使用Corona开发的应用必须提交到它的服务器上去编译生成App,当然你可以先在本地使用模拟器来开发,但最后的发布包必须在服务器上生成,为此你必须每年交349美元的授权费,这比苹果的年费可高多了。
Monkey( http://www.monkeycoder.co.nz)是一个与Corona类似的框架,但是比Corona要稍好一些,如果单从开发者角度来看的话。
Monkey使用Bliz Basic语言开发应用,然后编译生成目标平台的Project,再将这个Project按照正常开发流程编译生成App。这个流程与Corona基本相似,不过编译的过程是在本地进行的,所以可以在目标Project生成之后再进行修改,这样一些在特定平台上的功能可以分别进行添加和修改。
另外Monkey的授权费比Corona要低得多,只需要一次付费,授权费也只需要120美元。
Monkey的问题在于它还处在开发的初期阶段,目前发布的版本只实现了最基础的功能,对于游戏开发来说,你还需要自己添加物理支持,粒子系统,如果你想要加入网络功能的话也得自己去做。当然社区里有热心用户公开了他们的一部分代码,但是,你懂的。
PhoneGap(http://www.phonegap.com/),如果你在Google搜索“cross platform mobile application framework”,第一个结果就是PhoneGap。当然这可能与选择的关键字有关,如果把关键字改为“cross platform mobile app development”,那么第一个结果是Corona,第二个结果还是PhoneGap。
PhoneGap宣传的是唯一一个同时支持6种移动平台的开发框架,这个没错,因为它的应用是基于Html的,本身就比较容易做到跨平台。但是PhoneGap也为应用做了一层封装,把一些系统级的API封装为Javascript API提供给应用开发者,然后启动一个WebView来加载实际应用。
这样的做法使得PhoneGap的应用基本上限制于Web类,对于游戏应用就不大合适,当然网页类SNS游戏除外 J。
至于为什么要用PhoneGap而不是直接让玩家用Safari打开一个URL,原因基本上有两点:一是应用可能需要一些系统底层功能,比如想要获取地理位置信息,或者是照相机等等,另一种情况是做成一个独立APP可以放到Store上去收费,而URL的收费就不那么方便了。
PhoneGap开发入门六大问题:
1.PhoneGap是什么?
PhoneGap是一个基于HTML和JavaScript的应用开发平台,使用它可以构建本地应用。你可以把PhoneGap看作一个正方形的web view container,它使用JavaScript编程接口实现用户在不同操作系统下的访问。你可以利用传统的web开发技术(如HTML、CSS、JavaScript)开发用户接口,利用PhoneGap容器把它们部署到不同的应用环境和设备上。
PhoneGap可以被用来开发跨平台的应用,这些平台包括Apple iOS、Google Android,、Windows Phone、BlackBerry、HP webOS,、Symbian和bada。你可以通过链接
这里获取更多关于PhoneGap支持的平台及其特色功能的信息。
PhoneGap是一个开源的框架,用户可以去这里l获取更多信息。
2.开发出的PhoneGap应用是什么样的形态?
由于UI绘制引擎就是移动设备的内置web浏览器,所以PhoneGap应用的形态可能多种多样。你可以使用标准的HTML&CSS使它看起来就像一个简单的网页,也可以使用UI框架使它像jQuery UI,Kendo UI,Sencha,Twitter Bootstrap或Skeleton(或者其它任意基于HTML/CSS/JS的用户框架接口)。另外你也可以采用CSS模式/主题使它看起来就像一个本地应用,如模仿iOS和Android的iUI,模仿BlackBerry的bbUI。
PhoneGap应用可以是基于HTML的静态UIs,也可以是利用JavaScript开发具有动态效果和交互体验动态UIs。这取决于特定的应用、用户体验设计、受众目标以及指示PhoneGap应用如何出现的应用实例。
使用PhoneGap应用,你可以通过缩小放大操作放大或者缩小查看的内容,或者利用利用viewport metadata tag锁定浏览内容的大小。你可以利用常规浏览器的操作方式滚动浏览网页也可以像iScroll一样采用基于接触的滑动方式浏览网页。
基于HTML,CSS &JavaScript你有许多方式可以创建用户接口,所以并没有一个典型的外观。如果你没有使用任何的CSS模式,那么用户接口各元素默认和使用的操作系统或者浏览器保持一致,包括按钮、链接、色彩以及亮度。这时PhoneGap应用和操作系统默认的浏览器一样运行。
3.如何利用PhoneGap开发应用?
利用PhoneGap开发应用非常简单,90%的PhoneGap应用只需要一个文本编辑器即可。PhoneGap也能很容易的与特定的设备整合形成开发环境。具体可以参考以各应用平台上的开发指导链接:
在开发PhoneGap应用应用时,一定要谨记你是在web浏览器实例中运行代码。你是利用HTML和JavaScript开发应用而不是本地代码,因此不需要其它任何东西。实际上我的大部分开发都是利用HTML编辑器和Chrome浏览器实现的。当我需要在设备上做测试的时候再切换到特定的设备环境。
4.如何调试PhoneGap应用?
调试PhoneGap应用是PhoneGap开发过程中最棘手部分。只在物理设备上测试,并不能测试出所有的JavaScript异常。下面是一些具体的调式策略:
尽可能利用桌面浏览器调试
由于PhoneGap应用是利用HTML,CSS,and JavaScript进行开发的,你可以利用HTML编辑器开发大部分应用然后利用桌面web浏览器调试。最新版本的web浏览器(包括Chrome、IE、Firefox、Opera和Safari)都提供了丰富的调试功能。利用web浏览器开发工具,你可以检查HTML DOM元素,检查CSS的模式、设置JavaScript断点、检查内存和JavaScript变量。通过下面链接可以获得更多更多关于桌面浏览器开发工具的信息:
- Chrome Developer Tools
- Firefox via FireBug
- Safari Developer Tools
- IE Developer Tools
- Opera Developer Tools
你一旦利用桌面工具开发了应用的主要功能,便可以切换到特定的设备环境增加特定的设备功能并与PhoneGap APIs整合。
利用真实设备进行测试是必不可少的。利用真实设备测试可能获得不同于桌面浏览器和模拟器的性能,也可以发现不同的bug和问题包括API的不同和UX脚本的不同。
用debug.phonegap.com调试
利用debug.phonegap.com可以进行远程的基于设备的调试。利用Weinre调试工具你可以远程检查DOM、测试资源下载、检测网络使用、检测时间线以及控制台输出。如果你已经使用了上述列出的开发工具,就会发现它们看起来很相似。只是你不能在移动设备上设置断点,但是肯定比什么都没有强。
利用iOS5进行远程web调试
利用iOS5模拟器实现远程调试只需要开通远程调试功能即可。然后利用iOS5桌面模拟器发布应用。一旦应用运行它就会打开一个本地Safari实例。这将启动远程调试工具,完成断点设置和脚本测试。
通过连接你可以获取更多信息。
其他调试信息
通过下面链接你可以阅读更多关于PhoneGap应用应用的调试信息:
- http://phonegap.com/2011/05/18/debugging-phonegap-javascript/
- http://wiki.phonegap.com/w/page/16494768/Debugging%20PhoneGap%20Apps
5.如何部署PhoneGap应用?
部署PhoneGap应用和创建移动设备web是一样的,唯一不同的就是PhoneGap应用程在本地初始化HTML设置而不是远程服务器。PhoneGap应用加载初始化的HTML,它可以用来申请服务器或者本地上的资源。由于PhoneGap是基于浏览器的,可以像浏览器一样运行。你可以同时下载各种网页但是一旦你下载或者关闭一个网页很可能丢失通过JavaScript脚本存储在内存中的数据。PhoneGap也支持单页浏览模式,建议用户使用单页浏览模式。
单页浏览模式部署
单页浏览架构就是指只有一个HTML页基于数据和用户输入进行动态更新,你可以把它看做是客户/服务器模式,由一个客户应用和一个服务器组成。客户应用可以请求数据或者进行更新而不用重新加载web页。
通过使用单页浏览模式你可以维护内存中的数据。通过如下链接可以了解更多关于单页模式的知识。
可以利用任意常见的JS架构如Angular,Ember,Backbone,Mustache部署PhoneGap应用。
6.如何使PhoneGap应用在移动设备和应用环境中运行?
对每一个给定的平台而言,PhoneGap应用采用和本地应用相同的规则部署,你必须遵守每一个应用平台的部署规则。你可以利用每个平台的构建过程为这个平台编译可执行文件也可以利用build.phonegap.com进行编译。build.phonegap.com是可以为每个平台编译使用时具体平台的应用的服务。构建过程的输出是适用于一个特定平台的二进制文件:适用于iOS的IPA,适用于Android的APK。通过下面链接你可以获得更多信息:
- iOS App Store
- Google Android Market
- Amazon App Store
- BlackBerry App World
- Barnes & Nobe Nook Store
- Windows Phone Marketplace
7.PhoneGap和AIR的区别是什么?
PhoneGap和AIR最根本的不同就是你利用Flash平台(如Flex,Flash,ActionScript,MXML)开发AIR应用而基于HTML,CSS,&JavaScript开发PhoneGap应用。AIR应用利用AIR开发环境运行,这样应用只需要一个代码基便可以在所有它支持的平台上运行,PhoneGap可以在每一个它支持的平台上的浏览器上运行。由于这个原因,不同的平台可能有不同的代码基,在开发PhoneGap应用时需要考虑这一点。
可以在iOS、Android、BlackBerry Playbook和desktop(mac and windows)包括上Windows Metro开发AIR应用。通过下面链接可以了解更多关于AIR支持的平台的信息。
- http://www.adobe.com/products/air/tech-specs.html
ActionScript动作脚本语言支持传统的继承编程模式。可以使用Flex框架构建AIR应用,这使得开发者可以快速的构建企业类应用。AIR应用中的组件是具有行为、属性和图形上下文的逻辑客体。
基于JavaScript的应用支持原型继承编程,有许多开源框架和工具可以被使用。HTML/JS通过HTML DOM元素实现可视化。虽然利用JavaScript模板可以创建HTML接口,但是实际上你只是创建了具有属性和模式的DOM元素。
虽然两者构建应用的语法不通但是基本的交互式设计和交互式开发的概念却是一直的。两个开发平台各有优缺点。
接下来做什么?
你可以去链接http://phonegap.com/下载PhoneGap并开发,当然你也可以去链接查看其他人开发的应用。
原文链接:“What is PhoneGap?” & Other Common Questions
Titanium(http://www.appcelerator.com/),同样是在上面的搜索结果中,你大概已经注意到了这个名字。Titanium首页宣传的是有1.5M活跃开发者,22.5K的APP和20M的活跃用户,这个数字不知道是不是有一定水分,但是因为Titanium是免费并且开源的,所以有这么多注册的开发者本身可能不奇怪,Titanium的商业模式是靠提供技术支持与培训来赢利,这对于普通开发者来说是好事。
但是与PhoneGap类似,Titanium也是用于Web类的移动应用开发,但是Titanium似乎做的更进一步,把部分UI组件编译成了Native Code,这样使得应用看起来更像是专为这个平台开发的。在功能实现上,Titianium内置了一个JS脚本引擎,这比PhoneGap直接使用WebView也要更强大一些。
但是在StackOverFlow以及Titanium论坛上看到大量的抱怨,问题集中在文档的老旧以及BUG的修复太过于缓慢,还有在跨平台方面的支持不够完善,需要为不同平台编写大量的特定代码,这些问题对于应用开发者来说都是致命的。