还有 AppGyver类固醇 这很好地结合了PhoneGap和Native UI。
使用类固醇,您可以添加本地标签,本机导航栏,本机动画和过渡,本机模式窗口,本机抽屉/面板(脸书侧面菜单)等内容到您的PhoneGap应用程序。
这是一个演示: http://youtu.be/oXWwDMdoTCk?t=20m17s
我和Xamarin一起工作过。以下是我发现的积极和消极因素:
的 阳性 强>
的 否定 强>
作为替代方案,您可以在bridgeit.mobi查看BridgeIt。开源,它已经解决了上面讨论的浏览器性能/一致性问题,因为它利用了设备上的标准浏览器和Web视图浏览器。它还允许您访问本机功能,而无需担心应用商店部署和/或本机容器。
我已经使用if用于简单的基于相机的访问和扫描仪访问,它适用于简单的应用程序。文档有点轻松。不确定它将如何处理更复杂的应用程序。
我对Appcelerator Titanium的工作并不多,但最后我会理解它。
我可以更多地谈谈PhoneGap和Xamarin之间的差异,因为我每周工作这两天(或更多)。
如果您已经熟悉C#和JavaScript,那么我猜的问题是, 的 业务逻辑是否位于更适合JavaScript或C#的区域? 强>
PhoneGap旨在允许您使用编写应用程序 的 JavaScript和HTML 强> ,它们提供的大部分功能旨在模仿当前提出的HTML5最终可用功能规范。我认为PhoneGap的最大好处是,由于您使用HTML进行用户界面,因此很容易实现 的 在平台之间移植 强> 。缺点是,因为您在平台之间移植相同的UI,所以在任何一个平台上都不会像在家一样。意思是,没有进一步调整,你 的 无法在iOS和Android中拥有完全在家的应用程序 强> ,这意味着它具有iOS和Android风格。您的大部分逻辑都可以使用JavaScript编写,这也意味着它也可以 的 在平台之间移植 强> 。如果是当前的 PhoneGap API 做你想要的大部分,那么起床和跑步都很容易。但是,如果您需要从设备中获取不在API中的内容,那么您将获得乐趣 的 插件开发 强> ,将在 的 本机设备的首选开发语言 强> (有一点需要注意,但我会谈到这一点),这意味着您可能需要在Objective-C,Java等中快速加速。这个模型的好处是,您通常可以适应许多不同的原生图书馆为您服务的目的,以及 的 许多图书馆已经有PhoneGap插件 强> 。虽然您可能对这些语言没有多少经验,但至少会有 的 过多的例子 强> 从中工作。
Xamarin.iOS和Xamarin.Android(也称为MonoTouch和MonoDroid),旨在让您拥有 的 一个业务逻辑库 强> ,并在您的应用程序中使用它,并将其挂钩到您的UI。因为它基于.NET 4.5,所以你会得到一些 的 令人敬畏的lambda符号 强> , 的 LINQ 强> ,以及一大堆其他C#awesomeness,它可以让您的业务逻辑编写更少痛苦。这里的缺点是Xamarin希望你想让你的应用程序在设备上真正感觉原生,这意味着你可能最终会 的 为每个平台重写UI 强> ,然后将其与业务逻辑连接起来。我听说过 的 MvvmCross 强> ,是的 的 旨在让您更轻松 强> ,但我还没有机会调查它。如果你熟悉的话 的 MVVM 强> 在C#系统中,你可能想看看这个。当涉及到本地库时,MonoTouch变得有趣。 MonoTouch需要一个 的 捆绑 图书馆 强> 告诉你的C#代码 的 如何链接到底层的Objective-C和Java代码 强> 。其中一些库已经有了绑定,但如果你没有,那么创建一个可能很有趣。 Xamarin制作了一个名为的工具 的 客观Sharpie 强> 帮助完成这个过程,并且在大多数情况下,它会帮助你 的 95%的路在那里 强> 。剩余的5%可能需要80%的时间来尝试绑定库。
的 更新 强> p> 如下面的评论中所述,Xamarin已经发布 Xamarin表格 这是一个 的 跨平台抽象 强> 围绕平台特定的UI组件。绝对值得一看。 PhoneGap / Xamarin Hybrid 现在,因为我说我会接受它,上面的PhoneGap中提到的警告是一个 的 混合方法 强> ,你可以使用PhoneGap作为零件,而Xamarin作为零件。我对此有很多经验,我愿意 的 提醒你反对它 强> 。 的 高度 强> 。这个问题,是这样的 的 无人区 强> 如果你遇到问题,几乎没有人会接近你正在做的事情,并会质疑你想要做的事情。这是可行的,但是 的 这绝对不好玩 强> 。 Appcelerator Titanium 正如我之前提到的,我没有使用Appcelerator Titanium,所以对于它们之间的差异,我建议你看看 比较Titanium和Phonegap 要么 Corona,Phonegap,Titanium的比较 因为它对差异有非常详尽的描述。基本上,它似乎虽然 的 他们都使用JavaScript 强> ,JavaScript的解释方式略有不同。有了Titanium,你就会 的 把你的JavaScript写到 Titanium SDK 强> 而使用PhoneGap,您将使用。编写您的应用程序 PhoneGap API 。由于PhoneGap非常符合HTML5和JavaScript标准,因此您可以使用任何您想要的JavaScript库,例如JQuery。使用PhoneGap,您的用户界面将由HTML和CSS组成。使用Titanium,您将受益于他们的 的 跨平台XML 强> 看来 的 生成Native组件 强> 。这意味着它肯定会有更好的原生外观和感觉。
如下面的评论中所述,Xamarin已经发布 Xamarin表格 这是一个 的 跨平台抽象 强> 围绕平台特定的UI组件。绝对值得一看。
现在,因为我说我会接受它,上面的PhoneGap中提到的警告是一个 的 混合方法 强> ,你可以使用PhoneGap作为零件,而Xamarin作为零件。我对此有很多经验,我愿意 的 提醒你反对它 强> 。 的 高度 强> 。这个问题,是这样的 的 无人区 强> 如果你遇到问题,几乎没有人会接近你正在做的事情,并会质疑你想要做的事情。这是可行的,但是 的 这绝对不好玩 强> 。
正如我之前提到的,我没有使用Appcelerator Titanium,所以对于它们之间的差异,我建议你看看 比较Titanium和Phonegap 要么 Corona,Phonegap,Titanium的比较 因为它对差异有非常详尽的描述。基本上,它似乎虽然 的 他们都使用JavaScript 强> ,JavaScript的解释方式略有不同。有了Titanium,你就会 的 把你的JavaScript写到 Titanium SDK 强> 而使用PhoneGap,您将使用。编写您的应用程序 PhoneGap API 。由于PhoneGap非常符合HTML5和JavaScript标准,因此您可以使用任何您想要的JavaScript库,例如JQuery。使用PhoneGap,您的用户界面将由HTML和CSS组成。使用Titanium,您将受益于他们的 的 跨平台XML 强> 看来 的 生成Native组件 强> 。这意味着它肯定会有更好的原生外观和感觉。
据报道 蒂姆安德森
的 跨平台开发 强> 是一个 很重要 ,并将继续如此,直到每个人都使用相同的平台。 Android的? HTML? WebKit的? iOS版?视窗? Xamarin? Titanum? PhoneGap的?电晕? ECC。 有时我听到它说 的 基本上有两种方法 强> 跨平台的移动应用程序。你也可以 的 使用 强> 一个 嵌入式 浏览器控制 写一个 的 网络应用程序包装为本机应用程序 强> ,作为 在Adobe PhoneGap / Cordova或Sencha采取的类似方法,或 您可以 的 使用 强> 一个 的 跨平台工具 强> 那 的 创造本土 应用 强> ,例如Xamarin Studio,Appcelerator Titanium或Embarcardero FireMonkey。 然而,在第二类中,存在多样性。特别是, 它们在抽象用户的程度上有所不同 接口。 这是权衡。如果您设计跨平台框架,那么 可以让您的应用程序在每个平台上的工作方式几乎相同。 如果您在所有平台上共享UI设计,那么很难 让您的设计在所有情况下都同样正确。它可能会更好 采用大多数游戏采用的方法,使用的设计 独特的应用程序,并在其中保持一致性 平台,即使它没有原生的外观和感觉 任何平台。
的 跨平台开发 强> 是一个 很重要 ,并将继续如此,直到每个人都使用相同的平台。 Android的? HTML? WebKit的? iOS版?视窗? Xamarin? Titanum? PhoneGap的?电晕? ECC。
有时我听到它说 的 基本上有两种方法 强> 跨平台的移动应用程序。你也可以 的 使用 强> 一个 嵌入式 浏览器控制 写一个 的 网络应用程序包装为本机应用程序 强> ,作为 在Adobe PhoneGap / Cordova或Sencha采取的类似方法,或 您可以 的 使用 强> 一个 的 跨平台工具 强> 那 的 创造本土 应用 强> ,例如Xamarin Studio,Appcelerator Titanium或Embarcardero FireMonkey。
然而,在第二类中,存在多样性。特别是, 它们在抽象用户的程度上有所不同 接口。
这是权衡。如果您设计跨平台框架,那么 可以让您的应用程序在每个平台上的工作方式几乎相同。 如果您在所有平台上共享UI设计,那么很难 让您的设计在所有情况下都同样正确。它可能会更好 采用大多数游戏采用的方法,使用的设计 独特的应用程序,并在其中保持一致性 平台,即使它没有原生的外观和感觉 任何平台。
的 编辑 强> 2014年Xamarin v3开始提供选择 Xamarin.Forms 以及纯粹的本土仍然遵循这里提到的哲学(采取内联编辑的自由,因为这么好的答案)
另一方面,Xamarin Studio不会尝试提供共享的GUI框架:
我们不会尝试提供有效的用户界面抽象层 跨所有平台。我们认为这是一种不好的方法 最小公分母用户界面。 (纳特弗里德曼给蒂姆安德森)
这是正确的;但缺点是为您的应用程序维护两个或更多用户界面设计所需的努力。
有关PhoneGap和Titanium的比较报道很好 Kevin Whinnery 博客。
PhoneGap的目的是允许 的 基于HTML的Web应用程序 强> 至 被部署和 的 安装为本机应用程序 强> 。 PhoneGap网站 应用程序包装在本机应用程序shell中,也可以 通过本机应用程序商店安装多个平台。 此外,PhoneGap致力于提供通用的本机API集 这通常对Web应用程序不可用,例如基本的 相机访问,设备联系人和尚未曝光的传感器 浏览器。 要开发PhoneGap应用程序,开发人员将创建 的 HTML,CSS, 和JavaScript 强> 本地目录中的文件,就像开发一个 静态网站。接近 原生品质的UI性能 在里面 浏览器是一项非常重要的任务--Sencha雇用了一个庞大的网络团队 编程专家专职专职解决这个问题。甚至 因此,在大多数平台上,在今天的大多数浏览器中,达到 的 原生品质的UI性能 强> 响应很简单 的 不可能 强> 即使使用与Sencha Touch一样先进的框架。是个 虽然浏览器已经足够好了吗?这取决于您的要求 和敏感,但毫无疑问,它比原生UI更不好。 有时候更糟糕,取决于浏览器。
PhoneGap的目的是允许 的 基于HTML的Web应用程序 强> 至 被部署和 的 安装为本机应用程序 强> 。 PhoneGap网站 应用程序包装在本机应用程序shell中,也可以 通过本机应用程序商店安装多个平台。 此外,PhoneGap致力于提供通用的本机API集 这通常对Web应用程序不可用,例如基本的 相机访问,设备联系人和尚未曝光的传感器 浏览器。
要开发PhoneGap应用程序,开发人员将创建 的 HTML,CSS, 和JavaScript 强> 本地目录中的文件,就像开发一个 静态网站。接近 原生品质的UI性能 在里面 浏览器是一项非常重要的任务--Sencha雇用了一个庞大的网络团队 编程专家专职专职解决这个问题。甚至 因此,在大多数平台上,在今天的大多数浏览器中,达到 的 原生品质的UI性能 强> 响应很简单 的 不可能 强> 即使使用与Sencha Touch一样先进的框架。是个 虽然浏览器已经足够好了吗?这取决于您的要求 和敏感,但毫无疑问,它比原生UI更不好。 有时候更糟糕,取决于浏览器。
PhoneGap并不像人们所认为的那样真正的跨平台,而不是全部所有平台都同样支持功能。
Javascript不是一种应用程序规模的编程语言,太多的全局范围交互,不同的库通常不能很好地共存。我们花了很多时间试图让knockout.js和jQuery.mobile一起玩,我们仍然有问题。
框架和库的碎片化景观。选择太多,太多不够成熟。
奇怪的是,为了满足我们应用程序的需求,可以实现不错的性能(不过使用jQuery.Mobile)。我们尝试了jqMobi(不是很成熟,但很快)。
与其他应用程序或cdevice功能交互的能力非常有限,而且这不会是跨平台的,因为HTML5中没有任何标准,除了一些标准,如地理位置,相机和本地数据库。
通过 Karl Waclawek
的目标 的 钛 强> 移动是提供高水平, 的 跨平台的JavaScript 强> 运行时和 的 移动API 强> 开发(今天我们支持iOS,Android和Windows Phone。与MacGuby / Hot Cocoa,PHP或node.js相比,Titanium实际上与PhoneGap,Adobe AIR,Corona或Rhomobile有更多共同之处.Titanium基于两个断言构建关于移动开发: - 移动开发API的核心可以跨平台进行规范化。这些区域应该成为代码重用的目标。 - 开发人员在为该平台开发时应该包含特定于平台的API,UI约定和功能。这些用例应该存在特定于平台的代码,以提供最佳体验。
所以出于这些原因, 的 Titanium并不是一次尝试,只能在任何地方运行 强> 。与Xamarin相同。
钛将朝着类似于Xamarin的方向迈出一步。在实践中,他们将做两层不同的深度:钛层(在JS中),它为您提供了一个蜜蜂JS-of-Titanium。如果你想更低级别,已经创建了一个额外的层(称为Hyperloop),其中(总是用JS)直接调用你的SO原生API
AZDevelop.net
Xamarin(最初是Novell的一个部门)在过去的18个月里 推出了自己的IDE和Visual Studio管理单元。该 强调Mono的前提是创建不同的移动应用程序 在维护本机UI开发策略的同时使用C#。 除了创建一个开发原生的视觉设计平台 应用程序,他们已集成测试套件,并入原生 库支持和Nuget样式组件存储。最近他们 提供iOS视觉设计通过他们的IDE释放开发人员 从打开XCode。在Visual Studio中,现在都是三个平台 支持和云测试套件即将推出。 从开始,Xamarin提供了丰富的Android视觉设计 经验。我还没有下载或打开Eclipse或任何其他IDE 除了Xamarin。真正令人惊奇的是我能够使用LINQ 使用集合以及创建自定义委托和事件 这让我摆脱了客观C和Java的限制。很多人 我被宠坏了的库,比如Newtonsoft JSON.Net,工作 在所有三种环境中完美无缺
Xamarin(最初是Novell的一个部门)在过去的18个月里 推出了自己的IDE和Visual Studio管理单元。该 强调Mono的前提是创建不同的移动应用程序 在维护本机UI开发策略的同时使用C#。
除了创建一个开发原生的视觉设计平台 应用程序,他们已集成测试套件,并入原生 库支持和Nuget样式组件存储。最近他们 提供iOS视觉设计通过他们的IDE释放开发人员 从打开XCode。在Visual Studio中,现在都是三个平台 支持和云测试套件即将推出。
从开始,Xamarin提供了丰富的Android视觉设计 经验。我还没有下载或打开Eclipse或任何其他IDE 除了Xamarin。真正令人惊奇的是我能够使用LINQ 使用集合以及创建自定义委托和事件 这让我摆脱了客观C和Java的限制。很多人 我被宠坏了的库,比如Newtonsoft JSON.Net,工作 在所有三种环境中完美无缺
在我看来,有几个巨大的优势,包括
升级对我来说是使用Xamarin和MVVMCross的组合。它仍然是一个相当新的框架,但它源于其他几个框架(如MvvmLight和monocross)的经验,现在已经在几个已发布的跨平台项目中使用。
在了解了所有这些framwework之后,我的选择是选择开发基于的工具 的 产品需求 强> 。一般情况下,如果你开始使用一个你觉得舒服的工具(即使它需要更高的初始开销),你将永远使用它。
我选择了 的 Xamarin + MVVMCross 强> 我必须说对这个选择感到满意。 我不害怕接受Native SDK进行软件更新或者看到系统的有限功能或者功能图形最简单的东西。 的 写代码结构合理 强> (DDD + SOA) 的 非常有用 强> 有一个 核心项目 与本机C#视图实现共享。
Phonegap非常慢:单击按钮最多可能需要3秒才能显示下一个屏幕。 iscroll是缓慢和跳跃的。
还有其他有趣的错误和问题,我能够克服, 但总的来说 - 还没有完全成熟。
编辑: 根据Grumpy的评论,实际上并不是Phonegap,它是JS / Browser本机引擎