75

我将制作一个原生(意思是;不在浏览器中)移动应用程序。由于我是一名网络开发人员,我正在努力决定是否应该尝试 Phonegap 或者只是用 java 或 Objective-c 构建一个本机应用程序。

应用程序要求很简单。GPS/wifi 位置、Facebook 集成,我想我需要一个数据库来处理一些特定于应用程序的 Facebook 朋友关系。例如,就像游戏中的高分一样 - 类似的东西。

我是一名网络开发人员,还不知道 java 或 Objective-c。我以前从未使用过Phonegap,所以我不知道它是否能够满足我的要求。

所以我的问题如下;我可以在我的应用程序中使用 Phonegap,还是需要深入学习一门新语言?

4

10 回答 10

158

有关的:

这篇文章的更大版本也可以在这里找到,为了透明,这是我的个人博客。

混合与原生应用

混合应用:

临:

  • 更快的开发,特别是如果您是一名长期的 Web 开发人员。
  • 每个可用平台都可以使用 1 种语言。当然,这需要一个 Phonegap 包装器。您无需学习 Objective C、Java 或 C# 即可进行任何开发。您只需要了解 Phonegap 实现的基础知识。您将需要稍微使用上述语言,但您不需要理解它们。
  • Phonegap 可以提供一些原生功能,如 iOS 原生标签栏或 Android 原生标签栏等等。
  • 更低的预算成本和庞大的支持者和开发者社区。
  • 混合应用程序提供了这两种方法的许多优点,可以访问最常见的设备 API,并且覆盖广泛的设备,同时不需要完全原生应用程序更典型的专业技能、更大的预算和更长的上市时间。

缺点:

  • 一段时间后,您会在字面上和隐喻上流血。
  • 手机(即使是今天的平板电脑)还不够快,无法流畅地运行混合应用程序,移动 JavaScript 功能充其量只是床。Android 平台是一场噩梦,页面转换不流畅,更不用说缺乏 CSS/CSS3 实现了。如果您认为原生 Android 2.X 和 4.X 有差异,请查看 Android 2.X 糟糕的 JavaScript/CSS 实现。iOS 表现更好,但仍然缺少 CSS3 实现,但页面转换要好得多。为了让这个简短的原生应用程序总是有更好的用户体验和总体感觉。
  • 您将花费更多时间修复应用程序然后构建它。为每个平台创建一个应用程序是一件令人头疼的事情。不同平台上的浏览器并不统一支持所有最新的 HTML 功能和 API,这会给开发和测试带来挑战。
  • 如果你没有优秀的设计师,甚至不要尝试构建应用程序;长相就是一切。
  • 如果您不知道自己在做什么,那么您的应用很可能不会获得 Apple 应用商店的许可。如果他们发现第 3 方 Phonegap PayPal 插件,即使 Google Play 商店也会禁止您的应用。

原生应用:

临:

  • 原生移动应用程序可以产生最佳的用户体验——快速流畅,可以让您最好地访问设备功能,并且可以在应用程序商店中找到。
  • 毫无疑问,原生应用程序可以完全访问底层移动平台。原生应用程序通常非常快速和完善,非常适合高性能应用程序或游戏。这已经足够了。

缺点:

  • 更大的预算,如果你想要一个 Windows 移动应用程序,你至少需要一个具有 Java 和 Objective C 知识的人,甚至 C#。是的,您可以自己学习,但不要幻想自己会在短时间内完成。如果您从未做过任何开发,请选择 Objective C(iOS 仍然是一个更好的平台)。在其他情况下,请选择 Java。Java 的语法与其他可用语言相似,因此很容易从 C# 跳转到 Java,反之亦然。Objective C 是它自己的世界。它有一个相当不常见的语法。
  • 开发所有这些可能需要更长的时间,而且时间就是金钱。这取决于应用程序的复杂性。

就您而言,如果您具有良好的 Web 开发/设计技能和/或有优秀的设计师,您应该选择混合应用程序。只有当这个应用程序将是一个复杂的应用程序时才使用本机。您想要的一切都可以通过混合应用程序完成。你会发现一个很棒的支持社区。

混合应用

我之前没有提到的你需要在这里特别小心。即使您是经验丰富的开发人员,您也会发现很多您无法解决的问题。混合开发不应被误认为是基本的 Web 开发。

每个移动平台都有自己的一系列问题,更不用说手机的行为因设备而异。如果可能,请始终创建一个可以在较慢的设备上运行的应用程序,因为本机应用程序几乎可以在任何设备上成功运行。

最后一件事,在创建混合应用程序时,应用程序开发将花费您大约 30%-50% 的时间,其余时间用于特定平台的调试和学习。相信我,即使经过几年的移动开发,有时我也会面临无法单独或足够快地解决的问题。

所以在选择移动框架时要小心,选择 2-3 并花几天时间阅读它们。

链接

这里有几个链接可以帮助您做出决定:

PhoneGap + jQuery Mobile 1.4 教程- 这是 PhoneGap 和 jQuery Mobile 最新版本的分步教程

PhoneGap + jQuery Mobile 1.4 教程 - MacOS 版本- 这是在 MacOS 上部署 PhoneGap 的分步教程。jQuery Mobile 部分已在前一篇文章中介绍过,不再赘述。

jQuery Mobile vs Sencha Touch - jQuery Mobile Sencha Touch 比较

jQuery Mobile vs Kendo UI - jQuery Mobile Kendo UI 比较

7 个最著名的 HTML5 移动框架- 名称说明一切

7 个鲜为人知的 HTML5 移动框架- 名称说明一切

于 2012-12-28T12:59:48.590 回答
16

如果您的应用程序没有动画效果且简单,我更喜欢在更短的时间内在 web(Phonegap)cz 中创建,我们可以在多种类型的移动操作系统中启动。如果您的应用包含更多的 UI 效果和动画,那么最好使用原生的..

即使您在 webview(Phonegap) 中开发,您也需要学习 Android 和 iOS 中的一些基本步骤

Phonegap 在设备中的表现如何

ios ios webview中的动画和视图加载卡顿好,动画效果可以看清楚

android
运行html代码的时候要考虑android的设备版本和设备公司,android中一些高配置的设备给出更清晰高效的动画显示,但是一些设备(主要是旧版本和一些公司设备)不能给出很好的动画效果,渲染效果在android中因设备而异,

于 2012-12-28T06:44:39.173 回答
6

以我的拙见,Phonegap 你可以只开发简单的应用程序,仅此而已。文档是不够的,就像其他人说的那样,您将花费更多的时间来修复错误和寻找插件,而不是构建您的应用程序。我会努力学习 Android 或 iOS 或其他任何东西,将其视为您的时间投资。(是的,我的评论有点偏颇)。

于 2013-10-23T08:13:46.540 回答
3

这完全取决于您的需求

在发布了我的第一个应用几个月后(原生 Android,数据库驱动,restful 连接应用),我决定使用 phonegap 重写我的应用(因为我想将应用克隆到 iOS,所以不要在 ObjC 中做,为什么不用 javascript ?)

在 Android 上,我(一名 Java 开发人员)花了 3 周时间从头开始学习和编写所有代码。关于如何使 ListAdapter 与我的服务器上的 Restful Service 同步,如何为应用程序设置主题(在我看来这很难,尤其是在涉及透明、边框等特殊效果时,... ),以及如何有效地构建你的代码库(如果你熟悉 Java,你会发现所有的类都非常耦合,因为大多数教程都是这样写的)

在 Phonegap 上,一切都在 1 周内完成。Css, html,onsenuiangular制作 GUI 开发就像一年级学生的作业和主题只是小菜一碟。我不需要在真机上运行,​​开发时使用浏览器,改代码刷新就行了。Angular提供与 DOM 的两种绑定方式,这在收集和显示数据时非常棒。例如:

<ul ng-each="for sentence in sentences" >
   <li>{{ sentence.title }} </li>
</ul>

当变量sentences更改(从服务器检索)时,DOM 也会自动更改。但是,javascript 只是 javascript。在调试应用程序时,我发现自己很多次都在苦苦挣扎,尤其是在使用 PouchDB 执行 MapReduce 功能时(大错特错,必须回到cordova-sqlite-plugin今晚),而且大多数时候,我必须阅读日志才能找出问题所在( Chrome 的工具和 Firebug 无法捕捉断点)。此外,很难重构您的应用程序(再次是 javascript),因此如果您没有在第一个迹象时仔细组织您的代码库,您最终可能会陷入混乱(再次调试是一个真正的痛苦)。PhoneGap 也是基于 Web 的,所以有时你会听到“因为在这个平台上,它不支持那个 bla bla bla”(例如,localStorage) 如果你找不到任何好的插件,你必须支持它。

结论除了基于 Web 的存储的限制之外,PhoneGap 与数据库驱动的简单 GUI 应用程序配合得很好(而且目前大多数数据库驱动的应用程序都有一个简单的 GUI)。如果你要开发那种应用程序,那就坚持下去

于 2014-05-20T19:22:57.387 回答
3

最后我调查了一下,PhoneGap 都是 html、css 和 javascript。因此,您可能会有宾至如归的感觉。PhoneGap 可以处理 GPS 定位,请参阅PhoneGap 文档中的这篇文章。你是否想学习 Objective C 取决于你学习新语言的速度,因为它有点偏离 Web 开发。

于 2012-12-28T06:46:52.467 回答
2

使用ionic签出,由 angular.js 支持,以抵消已接受答案中提到的一些缺点。启动员工目录应用程序的教程:http: //coenraets.org/blog/2014/02/sample-mobile-application-with-ionic-and-angularjs/

于 2014-03-11T13:57:22.263 回答
1

@Gajotres 写了一个很好的回应,但自 2012 年以来,混合应用程序的性能已经取得了长足的进步。我回答了一个相关问题,该问题涵盖了 2017 年混合应用程序开发与原生应用程序开发之间的区别。

这个故事的寓意是,混合应用程序开发在过去几年中取得了巨大的进步,但在某些用例上仍然无法与原生应用程序相媲美。

借助 Ionic(2013 年首次发布)和 React Native(2015 年首次发布)等工具,使用类原生组件构建混合应用程序比以往任何时候都容易。混合应用程序现在速度更快、错误更少,并且能够与本机 UI 进行更深入的交互。

混合应用程序性能的门槛比几年前要高得多,但仍然有一个时候你可能需要用本地语言开发你的应用程序。

原答案:

是的,普遍的看法是混合应用不如原生应用。虽然这对于更熟悉 Web 技术的开发人员来说可能会令人沮丧,但它确实是有充分理由的:

  1. 无法与本机组件交互:尽管存在诸如此类的插件cordova-plugin-statusbar,但使用 Web 技术与本机组件交互和操作本机组件存在限制。我个人遇到的一个大(也是令人沮丧)的问题是,当键盘动画进入时,无法在键盘顶部进行输入。这听起来像一个问题,直到您查看一个应用程序,其中这是一个基本功能,例如在像 Slack 这样的聊天应用程序中。
  2. 300ms 延迟:尽管现代浏览器开始逐步淘汰这一点,但混合应用程序上存在的几分之一秒延迟使应用程序感觉缓慢且非原生。随着越来越多的用户采用 FastClick.js等变通方法,而Ionic等一些框架默认消除了这个问题,这个问题变得越来越不重要。
  3. 反对者是对的(在某种程度上):虽然混合应用程序开发已经取得了长足的进步,但仍然存在原生应用程序中不存在的小故障和滞后功能。屏幕转换、应用程序切换和电池寿命仍然是错误出现的常见领域,并且可能会持续一段时间,即使它们开始变得越来越不明显。
  4. 有一些很棒的 Native 解决方案:使用更新的语言,例如 Apple 的Swift,使用 Native 语言编写代码变得越来越容易。话虽如此,React Native等工具落入了 Native 和 Hybrid 之间的灰色地带,因为它允许开发人员使用 JavaScript 等友好技术进行编码,但可以编译成原生代码。

这个故事的寓意是,它实际上取决于对您的特定用例而言什么是重要的。混合应用程序已成为一种可行的选择,不再是令人尴尬的旁观者。相反,与 Native UX 交互仍然有一些小方面是不可能的,除非使用 Native 应用程序。

总的来说,我建议您规划您的项目并确定您的应用程序是否需要原生应用程序的任何好处。使用诸如 Ionic View应用程序之类的工具,您可以轻松地将应用程序的基本模型放在一起,并在真实设备上测试混合应用程序是否适合您。

于 2017-05-09T22:09:49.183 回答
0

还有 AppGyver Steroids 很好地结合了 PhoneGap 和 Native UI。

使用 Steroids,您可以将本机选项卡、本机导航栏、本机动画和过渡、本机模式窗口、本机抽屉/面板(facebook 侧菜单)等内容添加到您的 PhoneGap 应用程序。基本上,只要 CSS + JS 没有削减它,Steroids 就会进入本机层来执行操作。

此外,使用类固醇,您可以(尽管您不必)使用多页架构(多个 web 视图)而不是单一的。对于单页应用程序,像过渡之类的所有东西都只是 CSS 变通办法,正如 Mani 所说,即使是现代平板电脑和手机也不够快,无法使其流畅。当它是一个 phonegap 应用程序时,它总是很明显,特别是当你有一堆进程在运行时,或者如果你因为 JS 进程被拖拽而滚动(在 iOS 8 中已修复)。

使用多页面架构意味着您可以获得 100% 的原生性能(因为这些部分实际上原生的)。与 phonegap 不同,您将获得一致的用户界面行为和更轻松的调试(使用单页应用程序,通常很难在应用程序中重新创建特定状态)。多页面使您的应用程序的开发和维护变得更加容易,因为您的代码库保持清洁。

查看演示:http: //youtu.be/oXWwDMdoTCk?t= 20m17s

于 2014-08-01T10:22:45.240 回答
0

我还在这里找到了一篇很好的文章http://www.commentum.com/phonegap-vs-native-app-development.html,它在不同的类别中比较了这两种方式。

总结如下:

  1. 接口设计(同)
  2. 成本(混合有优势)
  3. 开发时间表(混合有优势)
  4. 用户体验和性能 (Native 有优势)
  5. 可维护性 (相同)
  6. 没有限制(原生有优势)
  7. 安全性(相同)
  8. 支持和资源(Native 有优势)
  9. 工具和调试(Native 有优势)
  10. 平台无关(混合有优势)
  11. 人气 (相同)
于 2016-05-15T04:16:41.570 回答
0

这里被忽略的一个很好的选择是使用Xamarin进行开发。

尽管利用 OP 的 Web 开发人员技能无济于事,但与 PhoneGap 相比,它有很多优点,几乎没有缺点。

Xamarin vs PhoneGap 优点:

  • 成熟的框架,提供对移动设备的大多数(如果不是全部)原生功能的访问。
  • 只学习一种适用于所有移动平台的语言(大多数开发人员使用 C#)。
  • 在 iOS/Windows Mobile 上具有原生应用程序的性能(因为应用程序被编译成原生代码)并且在 Android 上非常接近(它仍然编译为原生 APK,但必须有一个瘦包装器来翻译 .NET 类库 API在运行时进入 Android 类 API)。
  • 由 Microsoft 维护,它支持平台本身和开发工具的整体质量。例如,您将使用 Visual Studio,它可能是最好的 IDE,现在免费的社区版包含 Xamarin 开发所需的所有可用功能。

Xamarin vs PhoneGap 缺点:

  • 纯 Web 开发人员需要一些时间投资才能切换到 C# 和 Xamarin 类库 API。

因此,Xamarin 是当今跨平台开发的一个非常可靠的选择。

于 2017-09-01T16:33:48.550 回答