开发跨平台移动应用程序

soh*_*ilv 109 android cross-platform blackberry windows-phone-7 ios4

越来越多的移动平台正在推出,开发人员可以使用sdk.有各种移动平台可用:Android,iOS,Moblin,Windows mobile 7,RIM,symbian,bada,maemo等.

跨平台应用程序的制作是开发人员头疼的问题.我正在寻找跨平台的常见事物,这将有助于希望将应用程序移植到所有平台的开发人员.像差异屏幕分辨率,输入法,open gl支持等,请分享您知道的任何平台的详细信息.

或者是否有可能,通过在html(widget类型的东西)中编写代码并将其加载到本机应用程序中.我知道android,我们可以通过调用将web视图添加到应用程序中setContentView(view)

请分享我们可以将html视图添加到您知道的不同类型平台的本机应用程序中的类详细信息.

此线程的目的是在开发人员之间共享共同的细节.标记为社区维基.

跨平台工具和库

Tec*_*Zen 97

在这里的答案涵盖了跨平台工具的一些技术限制,但让我扩展一下:

我认为跨平台工具在历史上一直都很普遍,因为这些工具具有错误的哲学焦点.

跨平台工具的所有卖点都是它们为开发人员带来的好处.它们的出售理念是它们允许开发人员在任何地方进行一次写入.它们的销售理念是它们允许开发人员在不学习新API的情况下扩展其市场.它们的销售理念是它们允许开发人员削减成本并缩短产品上市时间.

销售什么跨平台工具是它们为最终用户带来的好处.

对最终用户的好处不是卖点,因为跨平台开发对最终用户来说很少是有益的.最终用户并不关心开发人员将产品推向市场的努力程度.当他们不使用一个平台时,他们也不关心应用程序可以运行多少个平台.他们只关心应用程序是否在运行它所需的硬件上执行了所需的操作.除非他们特别需要在许多不同的平台上运行应用程序,否则它确实没有带来任何价值.

相反,制作跨平台API的不可避免的妥协意味着API创建的所有应用程序在每个平台上都处于最佳B级.它们永远不会是每个平台上使用的最佳工具.

所有这些意味着,在大多数用例中,与使用平台特定API制作的产品相比,跨平台工具为最终用户提供了劣质产品.最终用户总是有更好的选择.

从长远来看,通过为最终用户提供最有用的工具,您可以赚钱.如果你没有哲学上专注于让最终用户的生活更轻松,更高效,那么你从一开始就注定要失败.最终用户有很多选择,如果您的工具不是最好的工具之一,那么您将不会进入市场.

如果您认为"用户将真正受益于在许多不同平台上运行此应用程序",您应该只使用跨平台工具.如果你开始只考虑跨平台工具,因为它们会让你(开发人员)的生活变得更轻松,那么你选择它们的原因是错误的,它们会伤害你,而不是帮助你.

  • 为开发人员减少(不必要的)工作意味着更快的更新周期,更快的新功能,更快的错误修正等等.拥有相同的人力可以获得更多.我认为这对最终用户有利. (52认同)
  • 理论上,更快的开发可能对最终用户更好,但这不是大多数跨平台API的哲学基础.我已经看到很多尝试在许多环境中使用这些工具,重点始终是以牺牲最终产品的质量为代价,使开发人员的生活更轻松.而且,更快,更便宜的承诺很少能够实现.似乎总是会显示停止在大部分时间节省下来的地方. (10认同)
  • 为了推动我的观点,请考虑这一点:跨平台API适用于许多不同类别的硬件和操作系统.您个人定期使用多少个跨平台应用程序?您曾经使用过多少跨平台应用程序?人们一直在推动跨平台的API,因为他们已经不止一个平台,但他们从未在任何地方取得过成功.它们没有成功,因为它们不会为最终用户生成最有用的应用程序. (5认同)
  • @TechZen - 我现在在我的网络浏览器上使用StackOverflow,并且没有任何理由寻找原生客户端.我认为你过分概括了你的主张. (4认同)
  • 我很不高兴这种主观的哲学辩论在技术网站上获得了正确的标记.更糟糕的是,这篇文章的论文对于我们今天使用的大多数主要软件都是无效的:Web浏览器是跨平台的; Photoshop,MS Office,Dropbox和东西都是跨平台的; 只需打开你的开始菜单或Finder并列出特定于平台的人员 - 最有可能找到小型实用工具.如果您认为移动电话完全不同(高度有效的假设),您的论证将是有效的,但似乎没有任何论据可以构建该基础. (4认同)
  • @Youval Bronicki - 您使用的网络浏览器是一个可以安装在两个或多个不同操作系统上的跨平台应用程序?除了几个Java实验之外,我还没有听说过这样做.例如,FireFox是针对每个操作系统单独编译的,同一编译不能在另一个操作系统上使用.跨平台代码与开放标准(如html,css等)之间存在显着差异. (3认同)
  • 我不确定我买它.你理论上是正确的.在实践中,随着Web平台的成熟,本机应用程序(对于某些应用程序)的好处变得不那么重要,并且在某些阶段本地应用程序不值得麻烦). (2认同)

Jla*_*Jla 14

有几种方法可以在移动设备上进行跨平台开发.当然他们都有局限性.没有任何解决方案可以像本机应用程序那样利用所有设备的功能.

重用代码

虽然所有移动操作系统都不使用相同的开发语言和API,但您有时可以共享某些类或逻辑层代码.

例如,C++可以通过使用NDK重新用于iOS应用程序,用于Android应用程序,用于Symbian应用程序,因为它们是用C++开发的,等等.

某些解决方案还提供了使用除设备通常使用的语言之外的其他语言编写应用程序的可能性.最着名的(事实上我唯一知道的)是商业的,基于Mono项目(C#开发):

但我不确定我们是否可以真正称之为跨平台开发,因为代码的重用受到限制,具体取决于设备:

  • Windows Phone 7将不允许本机代码开发(可能在进一步更新中)
  • 所有平台都不存在AFAIK mono like项目(还有?)bada,webOS,maemo等.

UI部分也保持特定于每个设备.

Web开发

在询问有关移动设备的跨平台开发时,常规答案是Web开发.然后,我们需要一个使用移动浏览器的包装器,使其外观和行为类似于本机应用程序.这就是我们将进一步研究的一些跨平台框架的工作方式.

HTML5的兴起带来了Web开发功能,这些功能只能通过地理定位,离线应用程序,本地存储等本机应用程序来完成.

通过利用最新的Web标准HTML5,CSS3,Js,我们可以找到越来越多的框架来开发具有原生外观的移动设备的Web应用程序:

但HTML5仍然非常年轻,实施可能因浏览器而异.大多数默认移动浏览器使用WebKit引擎(主要例外是使用Internet Explorer的Windows移动/电话),即便如此,它们也不一定支持相同的功能.本地数据库仍然难以使用,我们无法确定它将如何由不同的浏览器实现.此外,即使使用HTML5,与本机应用程序相比,Web开发仍然非常有限.您无法访问联系人,相机,加速度计等.

编辑:本月早些时候,W3C发布了一些关于HTML5演变的警告:来自ZDNet的文章

因此它只适用于有限类别的应用程序.

跨平台框架

而且我们拥有跨平台的移动应用程序框架.您可以使用它开发一次并在不同平台上部署.这些解决方案通常专注于iOS和Android,并依赖于WebKit引擎.在使用Web技术进行开发时,它们提供了与电话功能的更多交互.最着名的是Nitobi PhoneGap,RhoMobile Rhodes,Appcelerator Titanium.但是很多其他人都在那里,并没有全部使用像MoSync这样的技术,在将代码编译为所需平台之前将其转换为自己的中间语言.

[1] 请记住,Apple有针对其平台编写的应用程序的特殊政策.他们似乎并没有在这个日期阻止这些应用程序,但它是一个应该考虑的信息. 编辑:自9月9日以来,Apple已经改变了这项政策.


sea*_*and 6

在部署为webapp(如上所述的html5)时,您会有一些共性,但对于丰富的本机应用程序,各种智能手机的API完全不同.

HTML5可能会稍微改善一些事情,但要做有趣的事情,你需要去原生.

有"跨平台"的智能手机框架,如Phonegap,但我听说大多数关于将它用于"真实"工作的坏事.(很多开销等)


Mat*_*adt 5

是的,html5受到了一些关注.您还应该看看第四季度的这个联盟和平台.不确定该项目的成功,因为这听起来是一个巨大的挑战,但这里有详细信息:

网站:http: //www.wholesaleappcommunity.com/default.aspx

新闻:http : //news.google.de/news/search?aq=f&pz=1&cf=all&ned=us&hl=en&q=%22Wholesale+Applications+Community%22

WAC旨在于11月向开发人员发布其SDK的初始规范和组件.该规范将基于W3C标准,并为开发丰富的移动Web应用程序创建强大的平台.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/)