使用Xamarin实现跨平台移动应用开发(转载)

刚在朋友圈看到张善友,转发的一条分享“使用Xamarin实现跨平台移动应用开发”,写的确实很详细得体,从收费到开源,这段时间xamarin受到很多质疑,如此文http://blog.csdn.net/aofengdaxia/article/details/41891945/。固然这篇随笔也是转载的(若是不写成随笔,大伙可能看不到这篇文章)。但愿那些已经入坑xamarin的开发者能有一个新的认识html

原文连接:http://www.infoq.com/cn/articles/mobile-cross-platform-xamarin前端

原文做者:Adriana Blumlinux

本文要点

  • 对移动应用而言,跨平台开发方式下降了开发和维护的代价。
  • Microsoft收购Xamarin,这使得那些专一于Microsoft技术的企业受益不浅。
  • 自从Xamarin加入到Visual Studio中以后,其使用日益普遍。固然,这也要归因于它目前是开源和免费的。
  • Xamarin是“近乎原生”的。它将源代码编译为原生的iOS和Android。
  • Xamarin.Forms、Test Cloud和Xamarin University使Xamarin平台对开发人员更具吸引力。

做者 Adriana Blum 程序员

Xamarin曾是一种利基产品,售价昂贵。如今,它正逐渐成为一种广为使用的移动应用开发工具(参见连接给出幻灯片的第4张和第6张)。出于一些缘由,Xamarin并不适用于某些类型的应用,其自己也存在着很多缺点。对此,本文将作详细的介绍。同时,Xamarin也是一种跨平台的开发工具。所以,咱们还将在本文中权衡跨各类平台与原生开发上的一些优缺点。下面,咱们首先简述Xamarin的推出及发展历史。web

从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的许可费用在当时是很是昂贵的。redux

多年来,Microsfot一直关注着de Icaza的动向。在Microsoft看来,Xamarin就是公司真正须要的产品,由于Xamarin具备使用Visual Studio开发Android和iOS应用的能力。这样,Microsoft出手收购了Xamarin,并将Xamarin做为一种开源的IDE绑定到.NET中。这正是De Icaza多年前就但愿Microsfot能去作的事情。windows

 

图1 Xamarin的发展历史(图片来源:Craig Dunn的幻灯片后端

跨平台开发的案例

移动应用开发主要有三种方式:原生的、跨平台的和混合的。本文将不会介绍混合解决方案,由于这种解决方案一般没法达到原生的或真正跨平台开发的质量和稳健性

图2 三种开发方式(图片来源:Matt Larson在Xamarin Experience伦敦2017大会上演讲幻灯片

原生开发使用特定于设备平台的编程语言和API。例如在iOS上,使用的是Objective C或Swift。尽管使用这种方式,开发人员能推出最适用于设备的产品,但其中也存在着一些严重的问题:

  • 须要开发人员熟悉平台语言和API。
  • 增长了上市时间;
  • 增大了维护代价。

在开发团队中问题

对于开发原生应用,可能至少须要维护两个团队。一个团队具有在iOS平台上的Swift/Objective C开发技能,另外一个团队具有在Android上的Java开展技能。甚至颇有可能还须要维护第三个团队,即具有Windows平台开发技能的团队。咱们还须要确保团队能保持最新的技能,而且人员不会被其它公司挖走,由于当前对这些技能的需求量很大。若是使用跨平台的方法,并不能消除这个问题。可是该方法下降了开发人员入职所需的技能要求,问题获得了必定程度上的缓解。

在开发代码和测试代码时,若是须要维护多个基本上在作同一工做的团队,这最终将会对开发成本产生影响。

增长了上市时间

当公司中有多个不一样的团队同时投身于应用开发时,可能上市的时间会更长,由于这时会有两个(或更多)的团队使用不一样的语言在不一样的平台上编写、测试和调试同一个应用,而不是基于一个通用的C#技术栈。若是使用了跨平台的方法,这将有助于缩短推出应用所需的时间。

增大了维护代价和复杂性

消费类电子产品企业出于维持自身客户群的考虑,喜欢不断地推出新款手机,并不断地对操做系统推陈出新。相应地,应用也须要作不断地升级和更新。这使应用开发团队忙于在新设备上测试应用、发布新版本和补丁程序。若是使用跨平台方式,那么咱们能够在单个代码库上测试大部分或所有设备和更改。若是咱们选择的是独立原生应用,那么维护工做和发布时间安排会更为复杂。在一开始开发时,若是咱们建立了一个原生应用,那么时间和开销将保持增加。公司将须要维护一个更大规模的开发团队。

图3 特定于平台的开发方式(图片来源:Matt Larson在Xamarin Experience伦敦2017大会上演讲幻灯片

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的对比(图片来源: Craig Dunn的幻灯片

图5 Xamarin.Forms与Xamarin原生开发的对比(图片来源:Xamarin官方网站

Xamarin还提供了线上的Xamarin University,有助于开发人员快速熟悉开发所需的各个领域。

访问Xamarin Test Cloud

Test Cloud提供了一种应用测试环境,支持开发人员在其中模拟真实世界状况对两千多种真实手机进行实地测试。Test Cloud并不是免费的,可是对于受广大应用目标受众青睐的多种目标机型,使用Test Cloud无疑物有所值。此外,购买了Visual Studio Enterprise许可的组织,能够得到Test Cloud的25%折扣。

性能近乎原生

在跨平台方式和混合开发方式领域中,没有竞争者的表现可与Xamarin相匹敌。其中的缘由在于,Xamarin将源代码编译成二进制对象,而许多竞争对手(例如Sencha和PhoneGap)仅在运行时编译。 在2015年,一位开发人员Harry Cheung在Android和Apple上作过一些对比测试。必需要认可的是,测试当时所用设备,如今看来彻底过期了。这对于Xamarin而言尤为如此,特别是在iOS上。

图6 iOS平台上开发的应用性能对比(图片来源:Harry Cheung的Medium博客文章

图7 Android平台上开发的应用性能对比(图片来源:Harry Cheung的Medium博客文章

使用iBeacons和地理位置

若是用户须要在应用中使用Beacons和地理位置,那么Xamarin可使用邻近设备(其中包括Beacons和地理位置),支持定位和物联网(IoT)。Xamarin与Estimote间有着良好的合做关系。Estimote制造设备,并提供可用于开发的Xamarin SDK。尽管用户并不是必定要局限Estimote的设备,可是Estimote设备的确可使生活更轻松,由于基于设备开发的应用能够经过iBeacons(或其它协议)接收现场信息,其中包括了IoT设备的报告和监控状况。

Xamarin是跨平台的,可是近乎原生

尽管上面咱们已经介绍了跨平台开发的多个优势,可是在此咱们仍是要着重介绍Xamarin的一个亮点。Xamarin对于iOS和Android来讲都是“近乎原生”的。为实现这一点,Xamarin采用的一个方法是支持直接从C#调用开发人员使用Objective C/Swift for iOS及Java for Android的全部API。原生开发人员可用的标准用户界面控件,也能够经过Xamarin访问。这样,一旦应用运行在设备上,就会给出正确的观感。

尽管使用C#能够实现几乎全部的 特性,可是其中可能依然须要少许的原生代码。对于一名经验丰富的Xamarin开发人员,这无疑是应用开发中的一种福利,由于他们能够根据自身过往的经验决定调用状况。

Xamarin的适用之处

Xamarin具备强健的后端架构,很是适合于开发企业应用,以及任何须要作大量后端开发的应用。虽然Xamarin在须要功能丰富的用户界面方面有必定局限性,但Xamarin仍然能够生成一些很是有吸引力的应用。在本文稍后,咱们将会给出一些案例研究。

Xamarin的最大优点在于开发时间以及跨平台工做的效率上。因为竞争激烈,大多数移动应用项目都给出了一个最后期限,Xamarin开发人员的开发速度无疑占优。Xamarin的另外一个优点在于它能使用Estimote SDK,集成Beacons和智能眼镜等物联网设备。

Xamarin是运做在Microsoft生态系统中的,这一事实对于企业来讲也是一大优点。其中的大多数企业已对Visual Studio等产品作了投资,而且极可能拥有一个稳定的.NET开发团队。

Xamarin有不足之处

下面给出一些坏消息。在下列状况中,Xamarin并不是最好的选择:

  • UI界面复杂(B2C状况下);
  • 大量的动画和图形(例如,游戏);
  • 仍然须要一些原生编程的状况下;
  • 当应用会发展成很大的规模时;
  • 须要使用特定的开源软件库的状况下;
  • 若是开发人员不肯意支付Xamarin的许可费用。

UI界面复杂

若是应用面向的是最终用户,而且须要提供丰富的前端功能,这时建议使用原生应用。Xamarin.Forms足以应对简单的用户界面,并能够受益于Xamarin优异的后端功能。可是面对须要复杂用户界面的应用时,Xamarin是没法与原生SDK相媲美的。这是由于iOS和Android的UI必须根据各自平台的观感分别进行设计和实现,最终可共享的应用代码将不足一半,达不到通常状况下的75%,或是近乎使用Forms100%。这彻底违背了咱们使用Xamarin的初衷。所以,这时应使用Objective C或Java。

图形和动画

Xamarin也并不是开发游戏应用的好选择。Xamarin不适用于须要强大图形或动画的应用。尽管如此,咱们也不能彻底排除使用Xamarin开发游戏。一个例子就是Bastion展现在iPad上的游戏。此外,Xamarin的最新发展将会使这一情况有所改观。

图8 Bastion展现在iPad上的游戏(图片来源:Jo Ann Buckner在Xamarin官方博客上的文章

并不是100%的解决方案

正如咱们前面提到的,在一些状况下,要构建一个完整的解决方案,咱们可能仍然须要编写少许的原生代码。这意味着,开发人员仍然须要一些原生技能,这会下降Xamarin提供的优点。

访问开源软件库上的限制

原生开发人员可使用目标平台上全部可用的开源软件库。可是,Xamarin开发人员只能使用在Xamarin环境中的开源软件库,这一般数量更少。随着Xamarin的日益普及,预计在将来这个问题将会逐渐消失。正如NuGet的最新发展所示。

Xamarin应用的规模很大

Xamarin应用的规模会更大一些。开发人员可能须要作一些额外工做,去优化应用的大小。若是一个应用过大,安装将花费更多的时间,并可能在客户手机上引起存储和访问问题,这会致使用户考虑删除该应用。

Xamarin多是免费的,可是Visual Studio并不是免费的

因为Xamarin是捆绑在Visual Studio中的,开发人员会发现须要Visual Studio Professional或Enterprise版才能使用所需的功能。尽管入门级产品是免费的,固然其中也不会具有全部的特性。

Xamarin提供了标准许可和云许可,它们的价格可不便宜。下图显示了标准许可的报价,供读者参考。

图9 Xamarin许可报价(图片来源:Xamarin官方网站

一些使用Xamarin的成功案例

下面咱们选取了几个不一样行业的公司做为案例。这些公司使用Xamarin取得了满意的效果。

Siemens PLM

图10 Siemens PLM应用示例(图片来源:Kyle Maxey发表在engineering.com上的文章

Siemens PLM是由一些昂贵的工程软件组合成的庞大产品,在全球拥有超过9百万席位和7.7万名用户。Siemens但愿能借助一款名为“Catchbook”的轻便移动绘图和CAD应用,进一步扩展公司的市场。在应用中,用户可使用手指或触笔绘制形状。考虑到公司具有Microsoft的开发技能,却不具有iOS或Android的开发技能,所以Siemens选择了Xamarin。Xamarin提供的第一个优点,就是企业能够移植不少现有的代码。其次,企业避免了学习原生iOS和Android开发语言的麻烦,就能让75%的应用运行起来。

世界银行

图11 世界银行应用示例(图片来源:Ann Buckne发表在Xamarin官方博客上的文章

世界银行有一个小开发团队,由8位开发人员组成。团队成员熟悉Visual Studio和C#开发,所以团队可以使用Xamarin快速提升生产力。他们开发的一个复杂的调查系统只针对Android设备应用。这是由于世界银行所面对的是发展中国家用户,Android系统他们主要选择的手机类型。

可口可乐装瓶公司

图12 可口可乐装瓶公司应用实例(图片来源: Lacey Butler发表在Xamarin官方博客上的文章

在短短的四个月时间内,全球最大的可口可乐装瓶公司就将“MarketPlace”应用投入运行。与前面介绍的案例同样,公司拥有具有.Net和C#技能的工做人员,他们十分熟悉Visual Studio,这就是公司对使用Xamarin有兴趣的缘由。公司引入了两名经验丰富的Xamarin开发人员来指导团队(顺便说一句,他们在团队合做中使用了Slack。Slack也是使用Xamarin的)。

社区评论状况

Xamarin因为其敏捷性,使得产品可以在最短的时间内运行起来,所以在一些移动应用开发公司中广受好评。下面给出在Clutch Review论坛中的一些评论。

“对于具备.NET和C#经验的开发人员而言,他们但愿开发工具能集成Microsoft技术栈后端。Xamarin无疑是一种极好的工具。”

“经过与Xamarin的合做,咱们已成功地交付了大量的移动应用。这些应用获得了咱们客户的高度赞扬。例如,有一位客户但愿仅用正常时间的一半就交付一个应用,由于该应用将在一个大型活动中展现。正是因为Xamarin容许咱们无缝地共享代码,这使得咱们可以在最后期限内完成任务。客户很是高兴。面对如此时间上的压力,使用Xamarin老是更具优点。”

“如前所述,Xamarin最大的问题是在涉及到须要高度自动化的图形或应用时,就会面临一些问题。”

结论

虽然Xamarin并不是适用于任一移动应用,但它的确是公司在选择移动应用开发中的考虑对象。应用可能会至关复杂,正如上面给出的企业案例所示。在企业环境中,Xamarin中使用C#做为首选语言,这使得其在众多竞争对手中脱颖而出。自Microsoft收购Xamarin以来,市场也一直保持快速的增加。对于现有客户来讲,这无疑是一个好消息。

图13 Xamarin的市场增加状况(图片来源:Matt Larson在Xamarin Experience伦敦2017大会上演讲幻灯片

本文做者简介

Adriana Blum任移动应用开发公司Iflexion的高级技术架构师。她在管理和交付定制移动解决方案上,拥有13年以上的经验。她目前在帮助企业实现流程自动化、寻找新的发展机会,并建立可为企业带来高价值的应用。

查看英文原文: Mobile Cross-platform Development with Xamarin

有兴趣的能够关注一下个人微信公众号[dotNet全栈开发],分享一些编程相关的经典文章

相关文章
相关标签/搜索