写点什么

使用 Xamarin 实现跨平台移动应用开发

2018 年 1 月 11 日

本文要点

  • 对移动应用而言,跨平台开发方式降低了开发和维护的代价。
  • 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 的发展历史图片来源: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%,或是近乎使用 Forms 100%。这完全违背了我们使用 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

2018 年 1 月 11 日 17:253308
用户头像

发布了 367 篇内容, 共 88.9 次阅读, 收获喜欢 164 次。

关注

评论

发布
暂无评论
发现更多内容

一站式低延迟直播连麦解决方案

anyRTC开发者

音视频 WebRTC 直播 RTC sdk

YOLODet 最强PyTorch版的YOLOv5、YOLOv4、PP-YOLO、YOLOv3复现

wuzhihao7788

学习 AI 目标追踪

数据库JDBC:PreparedStatement

大规模数据处理学习者

JDBC SQL预处理 PrepareStatement

区块链是未来数字经济标志性的发明技术

CECBC区块链专委会

区块链 数字经济

scrapy学习之爬虫练习平台2

LLLibra146

Python 爬虫 python 爬虫 Scrapy

scrapy学习之爬虫练习平台3

LLLibra146

Python 爬虫 python 爬虫 Scrapy

scrapy学习之爬虫练习平台4

LLLibra146

Python 爬虫 python 爬虫 Scrapy

马云被约谈,阿里大数据的羹怎么分给每一个人?

CECBC区块链专委会

区块链 大数据

Java9 新特性 - 下篇

hepingfly

Java 新特性

scrapy学习之爬虫练习平台爬取

LLLibra146

爬虫 python 爬虫 Scrapy

复盘逆袭之路!三个月时间深造,怒斩拼多多、字节、蚂蚁金服破50W年薪Offer(含自学路线图)

Java架构追梦

Java 学习 架构 面试 数据结构与算法

Amdocs收购OPENET:关于5G应用落地的思考

VoltDB

大数据 数据分析 5G 物联网

scrapy学习之爬虫练习平台5

LLLibra146

Python 爬虫 python 爬虫 Scrapy

OpenShift 4 监控技术栈解析

东风微鸣

Kubernetes Prometheus openshift 可观察性 Thanos

架构师训练营第七周作业

邓昀垚

【面经】面试官:做过性能优化的工作吗?你会从哪些方面入手做性能优化呢?

冰河

面试 性能优化 JVM 高并发 高性能

程序员面试题为什么出得天花乱坠,实际工作中这些根本用不到?

Java架构师迁哥

智能驾驶看湘江:中国智能网联汽车产业的“长沙样本”

脑极体

YOLODet--YOLO系列网络结构图(YOLOv5,YOLOv4,PPYOLO,YOLOv3)

wuzhihao7788

学习 AI 目标追踪

哭了,前阿里P8见我spring太烂,把系列合集甩在了我脸上

周老师

聊点缓存——Part 1

姜雨生

redis 缓存

搞定秒杀,只需要这几步!!

架构师修行之路

缓存 分布式 微服务 秒杀

图解 | 不得错过的Binder浅析(一)

哈利迪

android

专业级沙箱与恶意样本的自动化分析

京东智联云开发者

云计算 监控 虚拟化

Scrapy中process_request返回request和None的区别

LLLibra146

Python 爬虫 python 爬虫 Scrapy

DDIA 读书笔记(4)多节点数据复制方案

莫黎

读书笔记

芯片破壁者(十九):显卡的战国与帝国

脑极体

巨建华:区块链+金融的难点

CECBC区块链专委会

区块链 金融

甲方日常 43

句子

工作 随笔杂谈 日常

目标检测之YOLOv1

Dreamer

嵌入式的我们为什么要学ROS

良知犹存

ROS

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

使用Xamarin实现跨平台移动应用开发-InfoQ