免责声明:我一直在跟踪您提到的跨平台工具,但从未用它们构建过任何东西。如果您读完这篇文章,您可能会猜到目前我主要是一名 Android 开发人员。
答案是:视情况而定。原生应用程序当然有优势,但问题是您是否关心(或足够关心)这些优势,从而产生针对多个平台进行开发的开销。由于您没有详细说明您计划构建哪种类型的应用程序,因此我将向您简要介绍一下我所知道的内容。
我假设您正在谈论基于 HTML 的跨平台解决方案(例如PhoneGap http://phonegap.com/, Sencha http://www.sencha.com/, and Rhodes http://rhomobile.com/)而不是像跨平台游戏导向的平台科罗娜SDK http://www.anscamobile.com/corona/ or Moai http://getmoai.com也不是总是有趣的 Mono 通过单点触控 http://xamarin.com/monotouch and 适用于 Android 的单声道 http://android.xamarin.com/。我也排除Titanium http://www.appcelerator.com/不支持 Windows Phone。
我发现原生解决方案和 HTML 跨平台解决方案之间的一些差距如下:
- 用户界面熟悉程度
- 性能(尤其是 UI)
- 兼容性
- 调试
- 平台API
用户界面熟悉程度
每个平台的用户都会对事物的运作方式产生一定的期望。 iOS 中的应用程序通常具有某些 UI 范例(顶部带有左侧后退按钮的栏,那些圆桌/列表 UI 等),Android 中的应用程序可能有另一个(例如 ActionBar,它类似,但不完全一样)与 iOS 栏相同,或长按上下文菜单中的项目),Windows Phone 用户还有另一种(平铺和全景视图)。如果您生成相同的 HTML UI,您可能无法利用它。对于通常不会花时间学习多个平台的用户来说,这些熟悉的 UI 模式使应用程序更加直观和舒适。
表现
Native 的另一个优势是性能,尤其是与 UI 相关的性能,无论是原始图形渲染能力还是计算能力。如果您有简单的 UI,这可能并不重要,但如果您有复杂的动画 UI,那么有些事情可能最终不会那么顺利。在 Android 中尤其如此,因为 Android 上有各种各样的设备,其中包括一些功耗相当低的设备。
兼容性
使用 HTML 跨平台工具的另一个缺点是不同的手机以不同的方式处理 HTML/CSS/JavaScript。这很有趣,因为这是一把双刃剑。一方面,HTML 本质上是跨平台的,这很好,但另一方面,您仍然遇到烦人的设备相关问题。在 Android 中尤其如此,那里有如此多不同的设备,并且制造商喜欢修补WebView
由于某种原因。最终你会遇到一些小错误,某些设备会做一些奇怪的事情。如果你完全采用原生,你往往会有更好的兼容性(当然,代价是投入更多的工作)。对旧版本 Android 的支持也往往缺乏。
调试
调试 JavaScript 并不是移动平台上最美妙的体验。您最终会在控制台上进行大量日志记录。这是可行的,但肯定不如逐行进入代码那么好。这方面似乎取得了一些进展(参见这个工具叫 weinre https://github.com/apache/incubator-cordova-weinre例如)但我还不能评论它有多好,因为我还没有时间去深入研究它。
这种调试不仅更加困难,而且发现错误也更加困难。 JavaScript 代码中的错误不会最终出现在日志中,除非您手动捕获并记录它们。你最终可能会导致事情默默地失败。
平台API
一般来说,你提到的大玩家都有相当不错的硬件支持。您提到的相机、GPS 和本地存储等功能对于应用程序开发人员来说在重要功能列表中非常靠前,因此他们将它们包括在内。要获得完整的功能列表,您可能需要访问每个功能的网站(这里是PhoneGap 的高级功能支持图表(按平台) https://phonegap.com/about/features例如),但通常您想到的大“电话功能”都在那里。即便如此,据我所知,还有很多更复杂的事情,这些框架没有做或做得不好,特别是那些与手机功能关系不大、与平台相关的事情。线程就是一个例子。