跨平台移动应用开发

110

越来越多的移动平台被推出,SDK也提供给开发者使用。目前有多种移动平台可供选择: Android、iOS、Moblin、Windows mobile 7、RIM、Symbian、Bada、Maemo等。

跨平台应用程序的制作对于开发者而言是个难题。我在寻找在各个平台中通用的事物,这将有助于想要将应用程序移植到所有平台上的开发者们。比如说不同的屏幕分辨率、输入方法、OpenGL支持等等。请分享您知道的任何一个平台的详细信息。

是否有可能通过编写 HTML 代码(一种类似小部件的东西)并将其加载到本地应用程序中来实现跨平台呢? 我知道 Android 可以通过调用 setContentView(view) 来将 Web 视图添加到应用程序中。

请分享您所知道的可以将 HTML 视图添加到不同类型的平台本地应用程序中的类细节。

本帖的目的是分享开发者之间的共同信息。将其标记为社区 Wiki。

跨平台工具和库


1
我发现了一个与此相关的有趣主题,链接如下: https://dev59.com/UXA75IYBdhLWcg3wYH_I - sohilv
另一个有关跨平台开发的好帖子:https://dev59.com/g3VD5IYBdhLWcg3wNYxZ - sohilv
1
投票关闭此问题,因为这是一个重复的问题。这个问题太重要了,不能分成两个问题。https://dev59.com/g3VD5IYBdhLWcg3wNYxZ - ripper234
1
我最近在博客上写了这篇文章http://www.stronia.com/2014/05/building-cross-platform-mobile-apps.html - Anshu Dwibhashi
5个回答

97

我的回答 在这里涵盖了跨平台工具的一些技术限制,但我想再详细说明一下:

我认为,跨平台工具从历史上来看一直处于次要地位,因为这些工具的哲学重点是错误的。

所有跨平台工具的卖点都是它们为开发人员带来的好处。它们被销售的理念是允许开发人员编写一次并在任何地方运行。它们被销售的理念是允许开发人员扩大市场而无需学习新的API。它们被销售的理念是允许开发人员削减成本和缩短上市时间。

跨平台工具没有销售它们为最终用户带来的益处。

对最终用户的好处并不是一个卖点,因为跨平台开发很少对最终用户有好处。最终用户不关心开发人员为把产品带到市场上所付出的努力。他们也不关心应用程序可以在多少个平台上运行,如果他们只使用一个平台,那就没有必要。他们只关心应用程序是否可以在他们需要运行的硬件上完成他们需要的工作。除非他们有特定需要在许多不同平台上运行应用程序,否则它因跨平台而实现对他们没有价值。

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

所有这些意味着,在大多数用例中,与使用特定于平台的API制作的应用程序相比,跨平台工具为最终用户提供了低劣的产品。最终用户将始终拥有更好的选择。

通过为最终用户提供最有用的工具,你可以长期获得收益。如果你的理念不是专注于让最终用户的生活更轻松、更高效,那么你从一开始就注定要失败。最终用户有很多选择,如果你的工具不是最好之一,那么你在市场上就无法立足。

只有当你认为"用户在许多不同的平台上运行此应用程序会真正受益"时,才应该使用跨平台工具。如果你一开始考虑跨平台工具只是因为它们会使开发者的生活更轻松,那么你选错了理由,它们将对你造成更多的伤害而非帮助。


52
对开发人员来说,少做(不必要的)工作意味着更快的更新周期、更快的新功能、更快的漏洞修复等等。在同样的人力资源下,可以实现更多的工作。我认为这对最终用户是有益的。 - schoetbi
10
理论上,更快的开发可能对最终用户更好,但这并不是大多数跨平台API的哲学基础。我见过许多尝试在许多环境中使用这些工具的尝试,重点总是在以牺牲最终产品质量为代价使开发人员的工作更轻松。此外,更快和更便宜的承诺往往不会兑现。总是似乎有一些令人望而却步的问题出现,消耗了大部分节省的时间。 - TechZen
5
为了更好地阐述我的观点,请考虑以下事实:许多不同类别的硬件和操作系统都存在跨平台API。你个人有多少常规使用的跨平台应用程序?你曾经使用过多少你认为很好的跨平台应用程序?自从有多个平台以来,人们一直在推动跨平台API,但它们并没有真正成功过。它们不能成功,因为它们无法为最终用户生产出最有用的应用程序。 - TechZen
4
@TechZen -- 我现在在网页浏览器上使用StackOverflow,没有理由去寻找本地客户端。我认为你过于概括你的说法了。 - Youval Bronicki
4
我感到非常不满,因为这种主观的哲学辩论在一个技术网站上得到了正确评分。更糟糕的是,这篇帖子的论点对我们今天使用的大多数主要软件都无效:Web浏览器是跨平台的;Photoshop、MS Office、Dropbox等都是跨平台的;只需打开开始菜单或Finder,并列出特定于平台的应用程序 - 很有可能大部分都是很小的实用程序。如果您相信手机与众不同(这是一个高度有效的假设),那么您的论点就是有效的,但似乎没有任何论据来建立这个基础。 - kizzx2
显示剩余15条评论

14
有几种跨平台开发移动设备的方法,当然它们都有局限性。没有一种解决方案能像本地应用程序那样充分利用所有设备功能。
重复使用代码
虽然所有移动操作系统不使用相同的开发语言和API,但有时可以共享某些类或逻辑层代码。
例如,通过使用NDK,C++ 可能可以重复使用iOS 应用程序,Android 应用程序,Symbian 应用程序等。
某些解决方案还提供了在与设备通常使用的语言不同的其他语言中编写应用程序的可能性。最著名(事实上我所知道的唯一一个)的是商业化且基于Mono 项目(C# 开发): 但我不确定我们是否真的可以称之为跨平台开发,因为根据设备,代码的重复使用是有限制的:
  • Windows Phone 7目前不允许本地代码开发(可能在以后的更新中会有)。
  • 据我所知,像Mono这样的项目尚未存在于所有平台上(尚未?),如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 ] 请记住,苹果有一项关于其平台上编写的应用程序的特殊政策。目前他们似乎没有阻止这些应用程序,但这是一个需要考虑的信息。 编辑:自9月9日起,苹果已经改变了此政策


6
你在部署Web应用程序时(如上所述,使用HTML5),可以获得一些共性,但是对于丰富的原生应用程序,各种智能手机的API完全不同。
HTML5可能会稍微改善一些问题,但是要做有趣的事情,您需要使用原生应用程序。
有“跨平台”智能手机框架,例如Phonegap,但我听说它在进行“真正”的工作时大多数都是坏的。(有很多开销等问题)

5

是的,HTML5正在受到关注。您还应该关注这个联盟和平台,将在第四季度推出。不确定该项目的成功,因为它听起来像是一个巨大的挑战,但以下是详细信息:

Website: http://www.wholesaleappcommunity.com/default.aspx

News: 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家电信公司组成的国际联盟,旨在创建一个对所有开发人员开放并向所有移动电话用户销售的平台。

1

实际上,iPhone 上没有 Java,据我所知,Java ME 也无法在 Android 上运行。 - Alaa Nassef
Android开发主要使用Java语言。http://developer.android.com/reference/java/net/package-summary.html - Nick Garvey
我不知道具体细节,但是Avian JVM允许Java在iOS设备上运行。 - Quazi Irfan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接