本文要点
对移动应用而言,跨平台开发方式降低了开发和维护的代价.
Microsoft 收购 Xamarin,这使得那些专注于 Microsoft 技术的企业受益匪浅.
自从 Xamarin 加入到 Visual Studio 中之后,其使用日益广泛.当然,这也要归因于它目前是开源和免费的.
Xamarin 是 "近乎原生" 的.它将源代码编译为原生的 iOS 和 Android.
Xamarin.Forms,Test Cloud 和 Xamarin University 使 Xamarin 平台对开发人员更具吸引力.
Xamarin 曾是一种利基产品,售价昂贵.现在,它正 逐渐成为一种广为使用的移动应用开发工具 (参见链接给出幻灯片的第 4 张和第 6 张).出于一些原因,Xamarin 并不适用于某些类型的应用,其本身也存在着不少缺点.对此,本文将做详细的介绍.同时,Xamarin 也是一种跨平台的开发工具.因此,我们还将在本文中权衡跨各种平台与原生开发上的一些优缺点.下面,我们首先简述 Xamarin 的推出及发展历史.
从 Gnome,Mono 到 Ximian
Miguel de Icaza 是 Gnome 项目的创始人,他同时也是一位开源项目冠军(Open Source Champion ).在他看来,要让开源项目得到大众的认可,必须使该项目与 Microsoft,Novell 等公司提供的商业软件毫无二致.出于此考虑, de Icaza 于 1999 年开始和 Nat Friedman 合作 .他们曾在 1997 年有过短暂的接触,那是在 de Icaza 的一次不成功的 Microsoft 面试期间.当时, de Icaza 对 Microsoft 管理层指出,他们公司的软件应该走上开源之路 .这次面试进展的并不顺利,但此后 Friedman 和 de Icaza 创立了 Ximian 项目,其中最主要的项目是 Mono .Ximain 于 2003 年被 Novell 收购 ,当时 Novell 正试图 从 Microsoft 赢回它们日益萎缩的网络市场份额 .此后,Novell 于 2011 年被 Attachmate 收购 ,而 Attachmate 裁剪掉了 Mono 项目的大部分资源 .
这在 de Icaza 和 Friedman 看来,无疑是一个机会.因此,他们着手创立了另一个初创项目,即 Xamarin,针对开发用于移动应用开发的产品.他们的首个产品 Xamarin.Mac 在 2012 年发布,支持开发人员使用 C# 语言为 Apple Mac 编写应用并通过 Apple Store 销售.在 2013 年,他们发布了 Xamarin 2.0,这款 IDE 产品的推出,使开发人员可以使用 Microsoft Visual Studio 开发用于 iOS,Android 和 Windows 的应用.但是该版本的一个主要缺点在于,Xamarin 的许可费用在当时是非常昂贵的.
多年来,Microsfot 一直关注着 de Icaza 的动向.在 Microsoft 看来, Xamarin 就是公司真正需要的产品 ,因为 Xamarin 具有 使用 Visual Studio 开发 Android 和 iOS 应用的能力.这样,Microsoft 出手收购了 Xamarin,并将 Xamarin 作为一种开源的 IDE 绑定到. NET 中.这正是 De Icaza 多年前就希望 Microsfot 能去做的事情.
图 1 Xamarin 的发展历史( )
跨平台开发的案例
移动应用开发主要有三种方式:原生的,跨平台的和混合的.本文将不会介绍混合解决方案,因为这种解决方案通常无法达到原生的或真正跨平台开发的 质量和稳健性 .
图 2 三种开发方式( )
原生开发使用特定于设备平台的编程语言和 API.例如在 iOS 上,使用的是 Objective C 或 Swift.尽管使用这种方式,开发人员能推出最适用于设备的产品,但其中也存在着一些严重的问题:
需要开发人员熟悉平台语言和 API.
增加了上市时间;
增大了维护代价.
在开发团队中问题
对于开发原生应用,可能至少需要维护两个团队.一个团队具备在 iOS 平台上的 Swift/Objective C 开发技能,另一个团队具备在 Android 上的 Java 开展技能.甚至很有可能还需要维护第三个团队,即具备 Windows 平台开发技能的团队.我们还需要确保团队能保持最新的技能,并且人员不会被其它公司挖走,因为当前对这些技能的需求量很大.如果使用跨平台的方法,并不能消除这个问题.但是该方法降低了 开发人员入职所需的技能要求 ,问题得到了一定程度上的缓解.
在开发代码和测试代码时,如果需要维护多个基本上在做同一工作的团队,这最终将会对开发成本产生影响.
增加了上市时间
当公司中有多个不同的团队同时投身于应用开发时,可能上市的时间会更长,因为这时会有两个(或更多)的团队使用不同的语言在不同的平台上编写,测试和调试同一个应用,而不是基于一个通用的 C#技术栈.如果使用了跨平台的方法,这将有助于缩短推出应用所需的时间.
增大了维护代价和复杂性
消费类电子产品企业出于维持自身客户群的考虑,喜欢不断地推出新款手机,并不断地对操作系统推陈出新.相应地,应用也需要做不断地升级和更新.这使应用开发团队忙于在新设备上测试应用,发布新版本和补丁程序.如果使用跨平台方式,那么我们可以在单个代码库上测试大部分或全部设备和更改.如果我们选择的是独立原生应用,那么维护工作和发布时间安排会更为复杂.在一开始开发时,如果我们创建了一个原生应用,那么时间和开销将保持增长.公司将需要维护一个更大规模的开发团队.
图 3 特定于平台的开发方式( )
Xamarin 跨平台开发的优点
跨平台的开发方式具有很多优点,其中主要是减少了复杂性,从而降低了成本和工作量.尽管任一跨平台解决方案都能有助于消除重复劳动,并具有更好的可维护性,但 Xamarin 还提供了其它一些优点.下面列出其中部分优点:
提高了代码的可重用能力;
在很大程度上减少了测试工作;
精简了维护;
提供全面的 Xamarin 环境;
可在 Xamarin Test Cloud 提供的两千多台设备上做实地测试;
近乎原生的性能;
支持地理位置和使用 iBeacon.
功能的一次性开发
在 Xamarin 中,有 超过 70%的代码 可重用.这意味着,许多针对 Android 开发的功能,无需重写全部内容即可用于 iOS.因此,开发人员一旦完成了针对某个环境的编码和测试阶段(无论是 Android,iOS 还是 Windows),就可以将同一代码用于其它环境,并使影响最小化.相比于使用原生开发方法,应用可以更快地交付市场.
降低了测试时间和工作量
我们并非说要削减测试工作.无论应运行在何种设备上,无论选用何种开发方式,软件测试都是任一应用开发中的重要组成.但是,在一个操作系统(例如 Android)上对大部分的功能测试和调试后,就会缩减在另一个操作系统(例如 iOS)上的测试时间,因为部分功能已经在一个平台上得以验证并测试.这样,开发人员可以专注于一些特定于平台的事项.相比起让两个团队以串联方式工作于两个不同的系统上,这种方式无疑降低了测试时间和工作量.
Xamarin 环境
Xamarin 提供的 IDE 功能全面,开发人员可以在 IDE 中执行构建最终产品所需的每个任务.Xamarin 最近推出了 Xamarin.Forms ,进一步简化了开发.但依然需要开发人员具有 Xamarin 经验,以决定是使用 Forms,还是坚持使用传统的 Xamarin 开发.Xamarin 官方推荐从 Xamarin.Forms 开始.
图 4 Xamarin 与 Xamarin.Forms 的对比( )
图 5 Xamarin.Forms 与 Xamarin 原生开发的对比(
来源: http://www.infoq.com/cn/articles/mobile-cross-platform-xamarin