Overview
据报道蒂姆·安德森 http://www.theregister.co.uk/Print/2013/02/25/cross_platform_abstraction/
跨平台开发 is a big deal,并将继续如此,直到有一天每个人都使用同一个平台。安卓?
HTML?网络工具包? iOS?视窗?哈马林?钛?电话间隙?电晕?等等。
有时我听到这样说本质上有两种方法跨平台移动应用程序。你可以use an 嵌入式
浏览器控制并写一个Web 应用程序包装为本机应用程序, 作为
在 Adobe PhoneGap/Cordova 或 Sencha 采取的类似方法中,或者
你可以use a 跨平台工具 that 创造原生
应用,例如 Xamarin Studio、Appcelerator Titanium 或 Embarcardero
火猴.
但在第二类中,存在多样性。尤其,
它们对用户的抽象程度各不相同
界面。
这是权衡。如果您设计跨平台框架,
可以让您的应用程序在每个平台上以几乎相同的方式工作。
如果你在所有平台上共享 UI 设计,那么很难
让您的设计在所有情况下都感觉同样正确。可能会更好
采用大多数游戏采用的方法,使用以下设计
使您的应用程序与众不同,并充分利用其一致性
平台,即使它没有原生的外观和感觉
任何平台。
editXamarin v3 于 2014 年开始提供以下选择Xamarin.Forms http://xamarin.com/forms以及仍然遵循此处提到的哲学的纯原生(自由进行内联编辑,因为这是一个很好的答案)
另一方面,Xamarin Studio 不尝试提供共享 GUI 框架:
我们不会尝试提供有效的用户界面抽象层
跨所有平台。我们认为这是一个糟糕的方法,会导致
最小公分母用户界面。 (纳特·弗里德曼对蒂姆·安德森说)
这是对的;但缺点是需要为应用程序维护两个或多个用户界面设计。
关于 PhoneGap 和 Titanium 的比较,有很好的报道凯文·威纳里 http://kevinwhinnery.com/post/22764624253/comparing-titanium-and-phonegap blog.
PhoneGap
PhoneGap 的目的是允许基于 HTML 的 Web 应用程序到
被部署和作为本机应用程序安装。 PhoneGap 网络
应用程序被包装在本机应用程序外壳中,并且可以
通过多个平台的本机应用程序商店安装。
此外,PhoneGap 致力于提供通用的本机 API 集
这通常不适用于 Web 应用程序,例如基本的
相机访问、设备触点和传感器尚未暴露在
浏览器。
为了开发 PhoneGap 应用程序,开发人员将创建HTML、CSS、
和 JavaScript本地目录中的文件,就像开发
静态网站。接近原生质量的 UI 性能在里面
浏览器是一项不平凡的任务 - Sencha 拥有一支庞大的网络团队
编程专家全职致力于解决这个问题。甚至
因此,在当今的大多数平台、大多数浏览器中,达到原生质量的 UI 性能响应能力很简单不可能,即使使用像 Sencha Touch 这样先进的框架。是个
浏览器已经“足够好”了吗?这取决于您的要求
和敏感性,但毫无疑问它不如原生 UI。
有时更糟,具体取决于浏览器。
PhoneGap 并不像人们想象的那样真正跨平台,并非所有功能在所有平台上都得到同等支持。
Javascript 不是一种应用程序规模的编程语言,有太多的全局范围交互,不同的库通常不能很好地共存。我们花了很多时间试图让 knockout.js 和 jQuery.mobile 很好地协同工作,但我们仍然遇到问题。
框架和库的碎片化景观。选择太多,也有太多不够成熟。
奇怪的是,对于我们应用程序的需求,可以实现不错的性能(尽管不是使用 jQuery.Mobile)。我们尝试了jqMobi(不是很成熟,但是很快)。
与其他应用程序或 cdevice 功能交互的能力非常有限,而且无论如何这都不是跨平台的,因为除了地理定位、相机和本地数据库等少数标准外,HTML5 中没有任何标准。
by 卡尔·瓦克拉维克 http://forums.xamarin.com/discussion/1003/your-opinion-about-several-crossplatform-frameworks#Comment_3334
钛合金加速器
目标是Titanium移动是为了提供高水平、跨平台 JavaScript运行时和移动应用程序接口开发(今天我们支持 iOS、Android 和 Windows Phone。Titanium 实际上与 MacRuby/Hot Cocoa、PHP 或 Node.js 的共同点比与 PhoneGap、Adobe AIR、Corona 或 Rhomobile 的共同点更多。Titanium 构建于两个断言之上关于移动开发:
- 有一个移动开发API的核心,可以跨平台标准化。这些领域应该成为代码重用的目标。
- 开发人员在针对该平台进行开发时应纳入特定于平台的 API、UI 约定和功能。这些用例应该存在特定于平台的代码,以提供最佳的体验。
因此,由于这些原因,Titanium 并不是“一次编写,到处运行”的尝试。与 Xamarin 相同。
Titanium 将朝着类似于 Xamarin 的方向迈出进一步的一步。在实践中,他们会做两层不同深度的层:钛层(JS),它给你一个蜜蜂 JS-of-Titanium。如果您想要更底层,请创建一个附加层(称为 Hyperloop),在其中(始终使用 JS)将您直接回调到 SO 的本机 API
Xamarin(+ MVVMCross)
AZDevelop.net http://azdevelop.azurewebsites.net/?page_id=181
Xamarin(最初是 Novell 的一个部门)在过去 18 个月中
将自己的 IDE 和 Visual Studio 管理单元推向市场。这
Mono 的强调前提是创建不同的移动应用程序
使用 C#,同时保持本机 UI 开发策略。
除了打造视觉设计平台来开发原生
应用程序,他们有集成的测试套件,合并了本机
库支持和 Nuget 风格的组件存储。最近他们
通过他们的 IDE 提供 iOS 视觉设计,解放了开发人员
从打开 XCode 开始。在 Visual Studio 中,所有三个平台现在都
支持,云测试套件即将推出。
从一开始,Xamarin 就提供了丰富的 Android 视觉设计
经验。我尚未下载或打开 Eclipse 或任何其他 IDE
除了Xamarin。真正令人惊奇的是我能够使用 LINQ
使用集合以及创建自定义委托和事件
这使我摆脱了 Objective-C 和 Java 的限制。许多
我已经被宠坏了的库,比如 Newtonsoft JSON.Net,工作
完美适应所有三种环境。
在我看来,有几个巨大的优势,包括
- 原生性能
- 更容易阅读代码(IMO)
- 可测试性
- 客户端和服务器之间共享代码
- 支持(尽管 Xam 在 bugzilla 上可以做得更好)
对我来说升级是结合使用 Xamarin 和 MVVMCross。它仍然是一个相当新的框架,但它诞生于其他几个框架(例如 MvvmLight 和 monocross)的经验,并且现在已在多个已发布的跨平台项目中使用。
结论
了解所有这些框架后,我的选择是选择基于的开发工具产品需求。但一般来说,如果您开始使用一种让您感觉舒服的工具(即使它需要更高的初始开销),那么您将永远使用它。
I chose Xamarin + MVVMCross我必须说我对这个选择感到满意。
我不害怕使用 Native SDK 进行软件更新,也不害怕看到系统功能有限或功能图形中最琐碎的事情。编写相当结构化的代码(DDD+SOA)非常有用有一个核心项目与本机 C# 视图实现共享。
参考文献和链接
- http://www.theregister.co.uk/Print/2013/02/25/cross_platform_abstraction/ http://www.theregister.co.uk/Print/2013/02/25/cross_platform_abstraction/
- http://kevinwhinnery.com/post/22764624253/comparing-titanium-and-phonegap http://kevinwhinnery.com/post/22764624253/comparing-titanium-and-phonegap
- http://forums.xamarin.com/discussion/1003/your-opinion-about-several-crossplatform-frameworks#Comment_3334 http://forums.xamarin.com/discussion/1003/your-opinion-about-several-crossplatform-frameworks#Comment_3334
- http://azdevelop.azurewebsites.net/?page_id=181 http://azdevelop.azurewebsites.net/?page_id=181
- https://github.com/MvvmCross/MvvmCross https://github.com/MvvmCross/MvvmCross
- http://pierceboggan.com/post/51671827932/binding-third-party-objective-c-libraries-in http://pierceboggan.com/post/51671827932/binding-third-party-objective-c-libraries-in