移动开发中本地编程有哪些优势?

12

我需要为一家公司开发应用程序,主要针对几个主要的移动操作系统,包括iOS,Android和WP7。

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

然而,这样做有什么优势吗? 有许多跨平台工具可用-如Sencha,Phonegap,Rhodes等。由它们创建的应用程序在不同设备上感觉有多“本地化”? 它们具有什么样的硬件集成(相机,GPS,本地存储等)?

如果有优点,我绝对没有时间限制,并且完全没有问题开发三个本机应用程序。

编辑:如果有关系的话,这些应用程序将具有在线和离线功能。

4个回答

18

免责声明:我注意到了你提到的跨平台工具,但从未用过它们构建过任何东西。如果你仔细阅读本文,你可能会猜到我目前主要是一名Android开发者。

答案是:取决于情况。原生应用程序确实有优势,但问题在于你是否关心(或关心得足够),有没有负担去为多个平台开发。由于你没有提供关于你计划构建什么类型的应用程序的详细信息,我将给你一个我知道的概述。

我假设你谈论的是基于HTML的跨平台解决方案(如PhoneGapSenchaRhodes),而不是面向跨平台游戏的平台,例如Corona SDKMoai,也不是通过MonoTouchMono for Android时总是有趣的Mono。我还排除了不支持Windows Phone的Titanium

我看到原生应用和这些HTML跨平台解决方案之间存在一些差距,如下所示:

  • UI熟悉度
  • 性能(特别是UI)
  • 兼容性
  • 调试
  • 平台APIs

UI熟悉度

每个平台的用户都对某些功能有特定的期望。iOS应用程序通常具有某些UI模式(顶部带有左侧返回按钮的那条条、圆角表格/列表UI等),而Android应用程序可能具有另一种模式(例如ActionBar,它类似于iOS上的栏,但并不完全相同,或长按项目以获得上下文菜单),Windows Phone用户则拥有另一种模式(磁贴和全景视图)。如果使用相同的HTML UI,则可能无法利用这些UI模式。熟悉的UI模式使得应用程序对通常不会花费时间学习多个平台的用户更加直观和舒适。

性能

原生应用程序的另一个优势是性能,尤其是与UI相关的性能,包括原始图形渲染能力或计算能力。如果您的UI很简单,这可能并不重要,但如果您的UI复杂且动画效果较强,则某些内容可能无法流畅运行。这在Android中尤为明显,因为您有许多不同的设备,其中包括一些性能较低的设备。

兼容性

使用HTML跨平台工具的另一个缺点是,不同的手机以不同的方式处理HTML/CSS/JavaScript。这有点讽刺,因为HTML本质上是跨平台的,但另一方面,您仍然要面对烦人的设备依赖性问题。在Android中尤其如此,因为您有很多不同的设备,并且制造商喜欢为某些原因调整WebView的实现。您最终会遇到某些设备出现奇怪问题的小错误。如果完全使用原生应用程序,则通常具有更好的兼容性(当然,代价是需要投入更多的工作)。对Android的旧版本的支持也往往不足。

调试

在移动平台上,调试JavaScript并不是一种非常愉快的体验。你最终会通过控制台进行大量的日志记录。虽然这可行,但肯定不如逐行跟踪代码那样好。在这方面似乎已经有了一些进展(例如可以参考名为weinre的工具),但我还没有深入研究过,因此无法对其优劣做出评论。

不仅这种调试方式更加困难,而且发现错误也更难。除非手动捕获和记录它们,否则JavaScript代码中的错误不会出现在日志中。结果可能是某些东西默默地失败了。

平台API

一般来说,你提到的这些主要厂商都有相当不错的硬件支持。像相机、GPS和本地存储等功能对于应用程序开发人员来说非常重要,因此它们会包含这些功能。如果您想获取完整的功能列表,您可能需要访问每个平台的网站(例如,这里是PhoneGap按平台的高级特性支持表),但通常大多数你所想到的"手机功能"都在那里。即便如此,就我所知,这些框架仍有许多更复杂的事情无法完成或者做得不太好,尤其是与手机功能关系不大而与平台相关的事情。线程处理就是其中一个例子。


4
跨平台开发需要在您的代码和本机API之间插入一个中介层。这些中介层可能会带来几个潜在成本,包括:
- 性能问题(解释器开销、JIT延迟或跨编译器优化的丢失), - 内存占用和应用程序加载时间, - 中介API是否足够快速地跟上最新的设备API和硬件功能(如果您需要它们), - 中介API是否公开了特定于设备的(非跨平台)API以及您是否可以添加它们, - 中介层是否提供或允许您覆盖其UX/UI呈现功能,使应用程序在每个目标设备社区或应用商店中看起来和行为都是“正确的”, - 一次编写,到处调试(再加上针对任何一个平台的多平台回归测试),等等。
请注意,性能低效可能表现为更快的电池耗尽,而不仅仅是可见的UI滞后。
您可能需要对您的特定应用程序的核心部分进行基准测试和/或模拟测试,以确定这些好处是否值得额外的开发成本。

2
我个人使用PhoneGap。我将我的UI库保持在最小化,可能只使用Jquery Mobile。只要JavaScript代码编写良好,也许使用mvc框架,我并没有注意到任何性能损失。
有时候我会使用远程PHP服务器来处理数据库,而ajax调用运行顺畅,其他时候我使用HTML5存储器,它也很顺畅。
所以,除非你想学习Java或Objective-C... :)

1

这是一个没有答案但有很多好的回答的问题--一般来说,除非有一些专门的设备驱动程序代码是专有的,否则按照设计使用API的一般情况将避免错误。

Java提供了丰富的抽象层,尽管有意为许可证公开了专有保护--我的建议是将其视为要保护某些东西,这比任何帖子都能更好地回答您的问题。


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