开发跨平台移动应用程序


109

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

跨平台应用程序的开发使开发人员感到头疼。我正在搜索跨平台的常见问题,这将有助于希望将应用程序移植到所有平台的开发人员。像差异屏幕分辨率,输入法,open gl support等一样。请分享您在任何平台上都知道的细节。

或者通过用html(事物类型的东西)编写代码并将其加载到本机应用程序中来实现。我知道android,可以在其中通过调用将Web视图添加到应用程序中setContentView(view)

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

该线程的目的是在开发人员之间共享通用细节。标记为社区Wiki。

跨平台工具和库


1
当我发现这是与此相关的,一个有趣的线程stackoverflow.com/questions/3326110/...
— sohilv

关于跨平台开发人员的另一篇好文章:stackoverflow.com/questions/51988/…–
— sohilv

1
投票决定将其关闭。这太重要了,无法分为两个问题。stackoverflow.com/questions/51988/...
— ripper234

Answers:


97

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

我认为,跨平台工具在历史上一直都是用过的,因为此类工具的哲学重点不正确。

跨平台工具的所有卖点就是它们带给开发人员的好处。之所以出售它们,是因为它们允许开发人员在任何地方编写一次即可运行。之所以出售它们,是因为它们使开发人员无需学习新的API即可扩展市场。之所以出售它们,是因为它们允许开发人员大幅削减成本和上市时间。

不出售什么跨平台工具是它们给最终用户带来的好处。

给最终用户带来好处不是卖点,因为跨平台开发很少给最终用户带来好处。最终用户不在乎开发人员将产品推向市场的辛勤工作。他们也不在乎只使用一个平台时,该应用可以在多少平台上运行。他们只是在关心应用程序是否在运行它们所需的硬件上执行了所需的操作。除非他们有在多个不同平台上运行该应用程序的特定需求,否则它确实没有任何价值。

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

所有这些意味着,在大多数用例中,与使用平台特定的API相比,跨平台工具给最终用户提供的产品质量较低。最终用户将始终有更好的选择。

从长远来看,您可以通过为最终用户提供最有用的工具来赚钱。如果您不从哲学上专注于使最终用户的生活更轻松和更有生产力,那么从一开始就注定要失败。最终用户有很多选择,如果您的工具不是最好的工具之一,您将无法在市场上找到它。

如果您认为“在许多不同平台上运行此应用程序,用户将真正受益”,则仅应使用跨平台工具。如果您仅仅因为跨平台工具使他们(开发人员)的生活变得更轻松而开始研究它们,那么您是出于错误的原因选择了它们,它们对您的伤害将大于其提供的帮助。


52
对于开发人员来说,更少(不必要)的工作意味着更快的更新周期,更快的新功能,更快的错误修复等。拥有相同的人力可以实现更多。我认为这对最终用户有好处。
— schoetbi,2010年

10
从理论上讲,更快的开发对于最终用户可能更好,但这并不是大多数跨平台API的哲学基础。我已经看到了许多尝试在许多环境中使用此类工具的尝试,并且重点始终是使开发人员的生活更轻松,而最终产品的质量却受到损失。此外,很少有实现更快,更便宜的承诺。似乎总是显示出在大部分时间都被浪费的地方停止了结。
— TechZen

5
为了阐明我的观点,请考虑以下几点:跨平台API存在于许多不同类别的硬件和操作系统中。您个人经常使用多少个跨平台应用程序?您曾经考虑过多少个跨平台应用程序?人们已经开始使用跨平台的API,因为它们已经不止一个平台,但它们从未在任何地方真正获得成功。他们不会成功,因为它们不会为最终用户提供最有用的应用程序。
— TechZen

4
@TechZen-我现在在我的Web浏览器上使用StackOverflow,但没有找到寻找本机客户端的任何理由。我认为您过度概括了您的主张。
— Youval Bronicki 2011年

4
我很不高兴这种主观的哲学辩论在技术网站上获得正确的标记。更糟糕的是,本文的主题对于我们今天使用的大多数主要软件都是无效的:Web浏览器是跨平台的;Photoshop,MS Office,Dropbox和其他东西是跨平台的;只需打开“开始”菜单或Finder并列出特定于平台的人员-多数情况下可能是找到小型实用程序软件。如果您认为手机完全不同(一个非常有效的假设),则您的论点是有效的,但是似乎没有任何论点可以建立这种基础。
— kizzx2 2011年

14

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

重用代码

尽管所有移动操作系统都没有使用相同的开发语言和API,但有时您可以共享一些类或逻辑层代码。

例如,由于C ++是用C ++开发的,因此C ++ 可能会重新用于iOS应用程序,使用NDK的Android应用程序,Symbian应用程序的C ++等。

某些解决方案还提供了用不同于设备通常使用的其他语言编写应用程序的可能性。最著名的(实际上是我所知道的唯一一个)是商业的并且基于Mono项目(C#开发):

但是我不确定我们是否真的可以称呼这种跨平台开发,因为根据设备的不同,代码的重复使用受到限制:

  • Windows Phone 7不允许进行本机代码开发(可能在进一步的更新中)
  • 并非所有平台都还存在AFAIK单声道样项目(还?)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日以来,苹果已更改了此政策。


6

作为Web应用程序部署时,您会获得一些共性(如上所述html5),但是对于丰富的本机应用程序,API对于各种智能手机而言是完全不同的。

HTML5可能会有所改善,但要做一些有趣的事情,您需要原生。

有诸如Phonegap之类的“跨平台”智能手机框架,但我听说过将其用于“实际”工作的主要弊端。(很多开销等)


5

是的,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=%22批发+应用程序+社区%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/)


1

据我所知,这些设备大多数都可以运行:

Java ME-移动设备最普及的应用程序平台

我认为这可以作为好例子,也可以作为坏例子。


实际上,iPhone上没有Java,据我所知,java me不能在android上运行
— Alaa Nassef 2011年


我不知道细节,但是Avian JVM允许Java在iOS设备上运行。
— Quazi Irfan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.