开发跨平台移动应用程序
越来越多的移动平台正在推出,开发人员可以使用sdk。 有各种移动平台可供使用:Android,iOS,Moblin,Windows Mobile 7,RIM,symbian,bada,maemo等。
而跨平台应用的制作让开发者头痛不已。 我正在寻找平台上的常见事物,这将有助于开发人员将应用程序移植到所有平台。 像什么是不同的屏幕分辨率,input法,开放式GL支持等,请分享你知道的任何平台的细节。
或者有可能,通过在html(widget的types)中编写代码并将其加载到本地应用程序中。 我知道的android,我们可以通过调用setContentView(view)
将Web视图添加到应用程序中,
请分享我们可以将html视图添加到您认识的不同types的平台的本地应用程序的类的详细信息。
这个线程的目的是在开发者之间共享共同的细节。 标记为社区wiki。
跨平台工具和库
-
XMLVM, Codename One和iSpectrum(从Android应用程序交叉编译Java代码或从头创build一个
-
手机差距 (跨平台移动应用程序)
-
titanium(使用networking技术构build原生移动和桌面应用程序)
-
单触式(C#for iphone)
-
rhomobile – http://rhomobile.com/样本在这里: http : //github.com/rhomobile/rhodes-system-api-samples
-
Sencha Touch – Sencha Touch是一款HTML5移动应用程序框架,允许您开发在Apple iOS和Google Android触摸屏设备上外观和感觉自然的networking应用程序。 http://www.sencha.com/products/touch/
-
Corona – Iphone / Ipad / Android应用程序跨平台库。 太棒了。 http://anscamobile.com/corona/
-
将现有Android应用移植到Windows Phone 7的指南http://windowsphone.interoperabilitybridges.com/articles/windows-phone-7-guide-for-iphone-application-developers
- 用于智能手机和平板电脑的Jquery Mobile Touch-Optimized Web Framework
我的答案在这里涵盖了跨平台工具的一些技术限制,但让我稍微扩展一下:
我认为跨平台工具在历史上一直是stream行的,因为这些工具的哲学焦点是错误的。
跨平台工具的所有卖点都是他们给开发者带来的好处。 他们的想法是让开发人员可以随时随地写一次。 他们的想法是允许开发者在不学习新的API的情况下扩大市场。 他们的想法是,他们允许开发人员削减成本和上市时间。
什么交叉平台工具不被销售是他们带给terminal用户的好处 。
对最终用户的好处并不是一个卖点,因为跨平台开发很less对最终用户有利。 最终用户并不关心开发人员如何努力将产品推向市场。 他们也不关心在不使用平台的情况下应用程序可以运行多less个平台。 他们只关心应用程序是否在需要运行的硬件上完成所需的工作。 除非他们有特定的需求在许多不同的平台上运行应用程序,否则它没有价值。
相反,制作跨平台API的不可避免的妥协意味着API创build的所有应用程序在每个平台上都至多为B级。 他们永远不会成为在每个平台上使用的最佳工具。
所有这些意味着,在大多数情况下,与使用特定于平台的API进行比较,跨平台工具会给最终用户带来低劣的产品。 最终用户将总是有更好的select。
通过给最终用户最有用的工具,您可以长期赚钱。 如果你没有从哲学上专注于让最终用户的生活更轻松,更高效,那么你从一开始就注定要失败。 最终用户有很多select,如果你的工具不是最好的,你不会在市场上。
如果您认为只有使用跨平台的工具,“用户才能真正受益于在多个不同平台上运行这个应用”。 如果你只是开始寻找跨平台的工具,因为它们会让你(开发者)的生活变得更容易,那么你就选错了他们,而且他们会比你帮助的更多地伤害你。
移动设备上有多种跨平台开发方法。 当然,他们都有局限性。 没有任何解决scheme能够像本地应用程序一样利用所有设备的function。
重新使用代码
尽pipe所有的移动操作系统都不使用相同的开发语言和API,但您可以共享一些类或逻辑层代码。
例如,C ++可以重用于iOS应用程序 ,使用NDK的Android应用程序,用于Symbian应用程序,因为它们是用C ++开发的。
有些解决scheme还提供了使用设备通常使用的其他语言编写应用程序的可能性。 最着名的(实际上是我所知道的唯一一个)商业和基于Mono项目 (C#开发):
- MonoTouch for iPhone [1]
- 适用于Android的MonoDroid (仍在开发中)
- 类似的黑莓项目 (仍在开发中)
但是我不确定我们真的可以调用这个跨平台的开发,因为代码的重复使用取决于设备:
- Windows Phone 7将不允许本地代码的开发(也许在进一步的更新中)
- AFAIK单一像项目不存在所有平台(还?)bada,webOS,maemo等
而UI部分也保持特定于每个设备。
Web开发
在问及手机跨平台开发时,经常回答是网站开发。 然后,我们需要一个包装器,它将使用移动浏览器,使其外观和行为像本机应用程序。 这就是我们将进一步看到的一些跨平台框架的工作。
HTML5的兴起带来了Web开发function,只能通过本地应用程序(如地理位置,离线应用程序,本地存储)才能完成。
通过利用最新的Web标准HTML5,CSS3,Js,我们可以find越来越多的框架来开发具有本地外观的手机Web应用程序:
- Sencha Touch
- 基于jQuery的JQTouch
- JQuery Mobile框架
但HTML5仍然非常年轻,实现可能因浏览器而异。 大多数默认移动浏览器使用WebKit引擎(主要的例外是使用Internet Explorer的Windows mobile / phone),即使如此,它们也不一定支持相同的function 。 本地数据库仍然是尴尬的工作,我们不能确定它将如何实现不同的浏览器。 而且,即使使用HTML5,与原生应用程序相比,Web开发仍然非常有限。 您无法访问联系人,相机,加速度计等
编辑:本月早些时候,W3C发布了一些关于HTML5演变的警告: 来自ZDNet的文章
所以它只适合有限的应用类别。
跨平台的框架
而且我们还有跨平台的移动应用程序框架。 你可以用它开发一次,然后部署在不同的平台上。 这些解决scheme通常专注于iOS和Android,并依赖于WebKit引擎。 在使用networking技术进行开发的同时,他们提供更多与手机function的交互。 最着名的是Nitobi PhoneGap,RhoMobile Rhodes,Appcelerator Titanium。 但其他许多人都在这里,并没有使用像MoSync一样的技术,它把你的代码翻译成它自己的中间语言,然后编译成所需的平台。
[1] 请记住,苹果有一个关于为他们的平台编写的应用程序的特殊政策 。 他们似乎并没有阻止这些应用程序在这个date,但它是一个应该考虑的信息。 编辑:自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=zh-CN&q=%22Wholesale+Applications+Community%22
WAC的目标是在11月份向开发者发布其SDK的初始规范和组件。 此规范将基于W3C标准,并为开发丰富的移动Web应用程序创build一个强大的平台。 WAC还将根据当前的JIL和BONDI规范为设备提供向后兼容性。 ( http://www.convergedigest.com/Bandwidth/newnetworksarticle.asp?ID=31021 )
。
这是一个由25家电信公司组成的国际联盟,旨在为所有开发者打造一个平台,向所有手机用户销售产品。 ( http://www.downloadsquad.com/2010/02/15/atandt-wholesale-applications-community-is-a-platform-not-an-app/ )
据我所知大多数这些设备是能够运行这个:
Java ME – 移动设备最普遍的应用平台
我认为这可以作为好的和坏的例子。
- Android中的date和时间更改监听器?
- 如何在Android中裁剪图像?
- 无法parsing方法setLatestEventInfo
- 如何解决android.os.DeadObjectException android x
- .connect()之后如何防止Android蓝牙RFCOMM连接立即死亡?
- 如何从Android Studio创build产品风味?
- Google Map Api v2在日志中显示“V / GoogleSignatureVerifier:签名无效”错误消息
- 如何在执行InApp结算时保护Google Play公钥
- Android Studio – 如何更改Android SDKpath