Developing cross platform mobile application
越来越多的移动平台正在推出,开发人员可以使用SDK。提供多种移动平台:Android、iOS、Moblin、Windows Mobile 7、RIM、Symbian、Bada、Maemo等。
而跨平台应用的开发也让开发人员头疼。我正在寻找跨平台的常见事物,这将有助于希望将应用程序移植到所有平台的开发人员。像什么是不同的屏幕分辨率,输入方法,打开GL支持等。请分享您所知道的任何平台的详细信息。
或者有可能,通过用HTML(小部件类型的东西)编写代码并将其加载到本机应用程序中。我了解Android,在Android中,我们可以通过调用
请共享类详细信息,我们可以在其中将HTML视图添加到您知道的不同类型平台的本机应用程序中。
这个线程的目的是在开发人员之间共享公共细节。标记为社区wiki。
跨平台工具库
XMLVM,代码名和ISPUTRUM(从Android应用程序交叉编译Java代码或从头开始创建代码)
电话间隔(跨平台移动应用程序)
Titanium(利用Web技术构建本地移动和桌面应用程序)
单声道触摸(适用于iPhone)
rhomobile-http://rhomobile.com/示例如下:http://github.com/rhomobile/rhodes-system-api-samples
SenchaTouch是一个HTML5移动应用程序框架,允许您开发在苹果iOS和谷歌Android触摸屏设备上看起来和感觉都是本地的Web应用程序。http://www.sencha.com/products/touch/
Corona-iPhone/iPad/Android应用程序跨平台库。太棒了。http://anscamobile.com/corona/
将现有Android应用程序移植到Windows Phone 7的指南http://windows phone.interoperabilitybridges.com/articles/windows-phone-7-guide-for-iphone-application-developers
- jquery mobileTouch针对智能手机和平板电脑的优化Web框架
这里我的答案涵盖了交叉平台工具的一些技术限制,但让我稍微扩展一下:
我认为跨平台工具在历史上也一直是RAN,因为这些工具有错误的哲学重点。
跨平台工具的所有卖点都是它们给开发人员带来的好处。他们的想法是允许开发人员在任何地方运行一次就可以编写。它们的销售理念是允许开发人员在不学习新API的情况下扩展其市场。他们的销售理念是允许开发商大幅削减成本和上市时间。
CrossPlaform工具并没有销售给最终用户带来的好处。
对最终用户的好处不是卖点,因为跨平台开发很少对最终用户有好处。最终用户不关心开发人员如何努力将产品推向市场。当他们不使用一个平台时,他们也不关心这个应用可以运行多少个平台。他们只关心应用程序是否在运行它所需的硬件上做他们需要的。除非他们有在许多不同平台上运行应用程序的特定需求,否则事实上,它确实没有给他们带来任何价值。
相反,制作跨平台API不可避免的妥协意味着由API创建的所有应用程序在每个平台上都将达到最好的B级。它们永远不会是在每个平台上使用的最佳工具。
所有这一切意味着,在大多数用例中,与使用平台特定的API制造的产品相比,跨平台工具为最终用户提供了一个劣质的产品。最终用户总是有更好的选择。
从长远来看,您通过向最终用户提供最有用的工具来赚钱。如果你没有在哲学上集中精力让最终用户的生活更容易和更有效率,那么从一开始你就注定要失败。最终用户有很多选择,如果你的工具不是最好的工具之一,你将无法在市场上获得它。
如果你认为"用户在许多不同的平台上运行这个应用程序真的会受益",那么你应该只使用跨平台工具。如果你一开始只是因为跨平台工具会让你(开发者)的生活更轻松,那么你选择跨平台工具的原因是错误的,他们会对你造成比他们帮助更多的伤害。
移动设备跨平台开发有几种方法。当然,它们都有局限性。没有解决方案能够像本机应用程序那样利用设备的所有功能。
再使用代码
虽然所有移动操作系统都不使用相同的开发语言和API,但有时您可以共享一些类或逻辑层代码。
例如,C++可以很好地被用于iOS应用程序,对于Android应用程序,通过使用NDK,用于Symbian应用程序,因为它们是用C++开发的,等等。
一些解决方案还提供了用设备通常使用的语言以外的其他语言编写应用程序的可能性。最著名的(事实上我只知道一个)是商业性的,基于Mono项目(C开发):
- iPhone单触屏[1]
- 用于Android的单机器人(仍在开发中)
- 黑莓的类似项目(仍在开发中)
但我不确定我们是否真的可以称之为跨平台开发,因为代码的重用受限于设备:
- Windows Phone 7不允许本机代码开发(可能在进一步的更新中)
- Afaik Mono-like项目并不适用于所有平台(还没有?)BADA、WebOS、Maemo等。
用户界面部分也保持特定于每个设备。
网站开发
当询问有关移动设备跨平台开发的问题时,一个常见的答案是Web开发。然后,我们需要一个包装器,它将使用移动浏览器,使其看起来和行为类似于本机应用程序。这就是我们将在工作中看到的一些跨平台框架。
HTML5的兴起带来了Web开发功能,这些功能只能通过本地应用程序完成,如地理定位、离线应用程序、本地存储。
通过利用最新的Web标准HTML5、CSS3、JS,我们可以找到越来越多的框架来为具有本机外观和感觉的移动设备开发Web应用程序:
- 触觉触觉
- 基于jquery的jqtouch
- jquery移动框架
但是HTML5仍然非常年轻,实现可能因浏览器而异。大多数默认的移动浏览器使用WebKit引擎(主要的例外是使用Internet Explorer的Windows Mobile/Phone),即使如此,它们也不一定支持相同的功能。本地数据库仍然难以使用,我们无法确定它将如何由不同的浏览器实现。此外,即使使用HTML5,与本地应用程序相比,Web开发仍然非常有限。您无法访问联系人、摄像头、加速度计等。
编辑:本月早些时候,W3C发布了一些关于HTML5发展的警告:ZDNet的文章
因此,它只适用于有限的应用类别。
跨平台框架
而且我们还有跨平台的移动应用程序框架。您可以使用它一次开发并部署到不同的平台上。这些解决方案通常侧重于iOS和Android,并依赖于WebKit引擎。它们在使用网络技术进行开发的同时提供更多与手机功能的交互。最著名的是NitobiPhoneGap、Rhomobile Rhodes、Appcelerator Titanium。但是还有很多其他的应用程序,并不像mosync那样使用相同的技术,在为所需的平台编译代码之前,mosync会将代码转换为自己的中间语言。
[1]请记住,苹果对为其平台编写的应用程序有一个特殊的政策。他们目前似乎没有阻止这些应用程序,但这是一个应该考虑的信息。编辑:苹果从9月9日起改变了这一政策。
当部署为webapp(上面提到的html5)时,您会得到一些共性,但是对于富本地应用程序,各种智能手机的API完全不同。
HTML5可能会有所改进,但要做一些有趣的事情,你需要本土化。
有"跨平台"的智能手机框架,如PhoneGap,但我听说过很多关于将其用于"真正的"工作的坏话。(很多开销等)
是的,HTML5正在受到关注。您还应该看看这个将在第四季度推出的联合平台。不确定该项目是否成功,因为这听起来是一个巨大的挑战,但具体情况如下:
网站:http://www.wholesaleappcommunity.com/default.aspx
新闻:http://news.google.de/news/search?aq=f&pz=1&cf=all&ned=us&hl=en&q=22批发+应用+社区%22
WAC aims to publish its initial
specification and components of its
SDK to developers in November. This
specification will be based on W3C
standards and create a strong platform
for developing rich mobile web
applications. WAC will also provide
backwards compatibility for devices
based upon the current JIL and BONDI
specifications.
(http://www.convergedigest.com/Bandwidth/newnetworksarticle.asp?ID=31021)
.
It IS an international coalition of around 25 telecom companies that's aiming to create a platform open to all developers and selling to all mobile phone users.
(http://www.downloadsquad.com/2010/02/15/atandt-wholesale-applications-community-is-a-platform-not-an-app/)
据我所知,大多数设备都能运行:
Java ME——移动设备最通用的应用平台
我认为这既是好的例子,也是坏的例子。