本机编程为移动开发的任何优势?

时间:2011-11-19 08:36:21

标签: android ios windows-phone-7 cordova extjs

我需要在一些主要的移动操作系统上为公司开发应用程序,特别是iOS,Android和WP7。

我最初计划为三种不同的操作系统编写三个独立的应用程序 - 每个操作系统使用本机SDK。

然而,这样做有什么好处吗?有许多可用的跨平台工具 - Sencha,Phonegap,Rhodes等。本地'他们创建的应用程序是否跨设备?他们有什么样的硬件集成(相机,GPS,本地存储等)?

我没有时间限制,如果有任何优势,那么开发三个原生应用程序绝对没有问题。

编辑:如果重要,应用程序将同时具有在线和离线功能。

4 个答案:

答案 0 :(得分:18)

免责声明:我一直在跟踪您提到的跨平台工具,但从未使用它们构建任何内容。如果你仔细阅读这篇文章,你可能会猜到我目前主要是Android开发人员。

答案是:这取决于。本机应用程序当然有优势,但问题是您是否关心(或足够关注)这些优势会产生开发多平台的开销。由于您没有详细说明您计划构建的应用程序类型,因此我将简要介绍我所知道的内容。

我将假设您正在讨论基于HTML的跨平台解决方案(例如PhoneGapSenchaRhodes),而不是跨平台游戏导向像Corona SDKMoai这样的平台,也不是通过MonoTouchMono for Android总是有趣的单声道。我也排除了不支持Windows Phone的Titanium

我在本机和那些HTML跨平台解决方案之间看到的一些差距如下:

  • 用户界面熟悉度
  • 效果(尤其是UI)
  • 兼容性
  • 调试
  • 平台API

UI熟悉

每个平台的用户都会对事物的运作方式产生一定的期望。 iOS中的应用程序通常具有某些UI范例(左侧的后退按钮,圆形表/列表UI等等),Android中的应用程序可能有另一个(ActionBar例如类似但不完全)与iOS栏相同,或上下文菜单的长按项),Windows Phone用户还有另一个(图块和全景视图)。如果生成相同的HTML UI,则可能无法利用它。那些熟悉的UI模式使应用程序更加直观和舒适,通常不会花时间学习多个平台。

效果

本机的另一个优点是性能,尤其是与UI相关的性能,即原始图形渲染能力或仅仅是计算。如果你有简单的用户界面这可能无关紧要,但如果你有复杂的动画用户界面,那么有些事情可能最终不会那么顺利。在Android中,尤其如此,您拥有大量设备,包括一些相当低功耗的设备。

兼容性

使用HTML跨平台工具的另一个缺点是不同的手机处理HTML / CSS / JavaScript的方式不同。这很有趣,因为这是一把双刃剑。一方面,HTML本质上是跨平台的,另一方面,你仍然有唠叨设备相关的问题。在Android中再次出现这种情况尤其如此,在这种情况下,您有许多不同的设备,制造商喜欢因某种原因修改WebView的实现。你最终会遇到一些小错误,某些设备会做出奇怪的事情。如果你完全是原生的,那么你往往会有更好的兼容性(当然是以投入更多工作为代价)。也缺乏对旧版Android的支持。

调试

调试JavaScript并不是移动平台上最精彩的体验。您最终会在控制台上进行大量日志记录。这是可行的,但肯定不如逐行进入你的代码那么好。在这方面似乎有一些进展(例如,见this tool called weinre),但由于我还没有深入挖掘它,我无法评论它有多好。

这种调试不仅更难,而且注意到错误也更难。除非您手动捕获并记录它们,否则JavaScript代码中的错误不会在您的日志中结束。你最终可能会默默地失败。

平台API

一般来说,你提到的大玩家都有相当不错的硬件支持。您提到的相机,GPS和本地存储等功能在应用程序开发人员非常重要的功能列表中非常重要,因此它们包含了这些功能。有关功能的完整列表,您可能需要访问每个功能的网站(例如,此处为PhoneGap's high-level feature support chart by platform),但通常您认为的大型“手机功能”内容就在那里。即便如此,有一些更复杂的事情,据我所知,这些框架不做或不做,特别是与手机功能和更多平台相关的事情。线程就是一个例子。

答案 1 :(得分:4)

跨平台开发需要在代码和本机API之间插入中介层。这些中介层有几个潜在成本,包括:

  • 性能(解释器开销,JIT滞后或交叉编译器优化丢失),

  • 内存占用和应用加载时间,

  • 中介API是否能够尽快跟上最新最好的设备API和硬件功能(如果您需要),

  • 中介API是否存在设备特定(非跨平台)API,以及是否可以添加它们,

  • 中介层是否提供或允许您覆盖其UX / UI呈现功能,以使应用程序在每个目标设备社区或App Store中看起来像“正常”,

  • 编写一次,随处调试(加上针对任何一个平台的修复程序的多平台回归测试)等。

请注意,除了可见的UI延迟或代替可见的UI延迟,性能低效可能表现为更快的电池消耗。

您可能需要对特定应用程序的核心部分进行基准测试和/或模拟以及用户测试,以确定这些优势是否值得所需的额外开发成本。

答案 2 :(得分:2)

我个人使用PhoneGap。我保持我的ui库至少,也许只使用Jquery Mobile。只要javascript代码编写得很好,也许使用mvc框架,我真的没有注意到任何性能损失。

我有时会为数据库使用远程php服务器,并且ajax调用运行顺利,有些时候我使用html5存储也可以顺利运行。

所以除非你想学习java或objective-c ......:)

答案 3 :(得分:1)

这是其中一个没有答案的问题,并且有很多不错的答案 - 通常答案是,除非有一些专有的设备驱动程序代码是专有的,否则使用API​​作为一般情况设计将避免失误

Java提供了一个丰富的抽象层,虽然有一个专有的保护暴露在有意识的许可 - 我的建议是看看,好像你要保护的东西&这将比任何帖子更好地回答你的问题