在考虑iOS或Android应用程序开发时,我们大多数人会首先考虑Objective-C vs Swift和Java。作为本地技术堆栈,当涉及到iOS和Android应用程序开发时,它们自然是最常用的移动开发工具。但是,还有更多方法来构建高性能和用户友好的移动应用程序。而Xamarin就是其中之一。在本文中,我们对Xamarin进行了深入审查,并将其与市场上的本地和跨平台移动开发解决方案进行了比较。如果您了解基础知识,请考虑跳到您感兴趣的部分。

什么是Xamarin?

使用Xamarin的优点

使用Xamarin的缺点

Xamarin Visual Studio IDE

Xamarin vs Native iOS / Android与混合开发

一点建议

什么是Xamarin?

在谈论移动应用程序开发的关键方法时,不可能忽视Xamarin 。Xamarin是一款用于跨平台移动应用程序开发的工具,它允许工程师在主要平台上共享大约90%的代码。作为一个相对较新的工具,它基于微软技术栈,已经有超过140万开发人员的社区。

该平台由Mono开发,后者是一个基于.NET框架的开源开发平台,由Miguel de Icaza领导,于2001年首次推出.Xamarin公司成立于2011年5月16日。

然而,与其前身不同的是,Xamarin被创建为商业项目,直到该公司于2016年被微软收购为止。Xamarin成为在Microsoft生态系统内开发移动应用程序的流行跨平台产品。此次收购打破了使用Xamarin的财务壁垒。随着微软开发Xamarin SDK开放源代码,它成为Xamarin Visual Studio集成开发环境的一部分(我们讨论下面用于Xamarin开发的最佳IDE )。Xamarin的主要特点是什么?

C#语言。Xamarin使用单一语言C#为所有移动平台创建应用程序。与解释性解决方案(如Appcelerator Titanium)不同,Xamarin是本机编译的,这使它成为构建具有本机外观和感觉的高性能应用程序的首选选项。

基于.NET框架。C#是一种成熟的语言,具有强大的安全性,可防止代码出现意外行为。由于C#是.NET框架语言之一,它可以与许多有用的.NET功能(如Lambda,LINQ和Asynchronous programming(Asynk))一起使用。

从技术上讲,Xamarin使用C#和包装在.Net层中的本机库进行跨平台应用程序开发。就性能和用户体验而言,这些应用程序经常与iOS和Android移动开发平台的本机应用程序进行比较。此外,Xamarin可以利用所有本机和最新的API访问,以利用Xamarin应用程序中的底层平台功能,例如iOS或Android多窗口上的ARKit。

xamarin android调用远程数据 xamarin 开发_ui

虽然与业务逻辑,数据库访问和网络通信相关的代码可以在所有平台上共享,但Xamarin允许您创建平台特定的UI代码层。因此,与通用混合应用相比,Xamarin跨平台应用在任何设备上看起来都是100%原生的,提供更好的用户体验。

汇编。该平台有两个主要产品:Xamarin.iOS和Xamarin.Android。在iOS的情况下,源代码直接编译为本地ARM汇编代码(Ahead-of-Time编译),而Android Xamarin应用程序首先编译为中间语言,然后 - 在运行时汇编到本机汇编代码中(Just-in - 时间编译)。但是,在这两种情况下,该流程都是自动化的,并且可以根据默认情况处理诸如内存分配,垃圾收集和平台互操作性等问题。

Xamarin.Forms。Xamarin.Forms是一款独立的产品,旨在创建原型或简单的移动应用程序,可跨iOS和Android共享100%的代码。

Xamarin.Mac。此外,工程师可以使用Xamarin.Mac为Mac OS构建应用程序。这些以及来自Xamarin堆栈的其他一些产品将在稍后讨论。

平台SDK。Xamarin通过简单的C#语法提供对平台特定的SDK(iOS和Android SDK的CocoaTouch)的访问。

平台特定的代码绑定。在大多数情况下,工程师将能够处理Xamarin环境中保持各自平台原生外观和感觉的开发。但是,如果您必须重新使用某些模块或实现条形码扫描,PayPal或Google Analytics集成等特定于平台的功能,Xamarin允许您调用现有的平台代码(例如Swift for iOS)。

支持可穿戴设备。Xamarin支持为Apple和Android Watch设备构建应用程序。工程师可以使用适用于Mac和Windows的Visual Studio来构建iOS Apple Watch应用程序。另外,Xamarin完全支持Android Wear。

Xamarin项目结构。预计大部分与Xamarin相关的工作将通过安装了Visual Studio和Xamarin的Windows开发计算机运行。应用程序可以直接从桌面或设备和仿真器进行调试。如果您打算在Windows上开发iOS应用程序,则Visual Studio连接到iOS故事板设计器和iOS模拟器也是可能的。还有Visual Studio for Mac,它允许在Mac上运行模拟器或直接在系留iPhone上运行。调试通过Visual Studio运行。

xamarin android调用远程数据 xamarin 开发_移动开发_02

Xamarin项目结构。图像来源:Visual Studio文档

为了更深入地了解Xamarin工程方面,请考虑检查这些资源:

主要的Xamarin文档中心

Xamarin.Android文档

Xamarin.iOS文档

Xamarin.Forms文档

Xamarin的Visual Studio

Xamarin Studio应用中心

Xamarin社区论坛

与任何其他技术一样,Xamarin有其自身的优点和缺点,近来一直是热烈讨论的主题。为了对Xamarin和原生开发做出明智的决定,让我们用Xamarin来衡量应用程序开发的优点和缺点。

使用Xamarin进行开发的优点

许多公司使用Xamarin的理由很充分,包括Trello,Slack和GitHub。

⊕为所有平台编写一个技术栈

Xamarin使用C#补充.Net框架来为任何移动平台创建应用程序。因此,您可以重复利用多达96%的源代码加速工程周期。Xamarin也不需要在开发环境之间切换:您可以在Visual Studio中构建完全取代Xamarin Studio的所有Xamarin应用程序。跨平台开发工具作为IDE的内置部分提供,无需额外费用。

⊕性能接近原生

与基于Web技术的传统混合解决方案不同,Xamarin构建的跨平台应用程序仍然可以归类为本地应用程序。性能指标与Android的Java(如此处所述)和Objective-C或Swift 的性能指标相当,可用于本机iOS应用程序开发。而且,Xamarin的性能不断得到改进,完全符合本土开发的标准。Visual Studio为构建,测试和跟踪应用程序的性能提供了一个完整的解决方案:Visual Studio App Center  允许您在发布之前运行自动UI测试并识别性能问题。但是,这项服务需要支付额外费用。

⊕本地用户体验

Xamarin允许您使用平台特定的UI元素创建完美的体验。针对iOS,Android或Windows的简单跨平台应用程序使用Xamarin.Forms工具构建,该工具可在应用程序运行时将应用程序UI组件转换为平台特定的界面元素。随着Xamarin.Forms的使用显着增加了应用程序开发的速度,它对于面向业务的项目来说是一个很好的选择。然而,由于额外的抽象层,性能可能会略有下降。对于自定义应用程序用户界面和更高的性能,您仍然可以单独使用Xamarin.iOS和Xamarin.Android以确保出色的结果。

⊕全面的硬件支持

借助Xamarin,您的解决方案可以获得本机级别的应用程序功能。它消除了所有硬件兼容性问题,使用插件和特定的API,以便在平台上使用通用设备功能。随着访问平台特定的API,Xamarin支持与本地库链接。这可以提供更好的定制和原生级功能,而且开销很小。

⊕开源技术与强大的企业支持

该公司于2016年2月被微软收购后,Xamarin许可政策发生了根本性的变化。包括运行时,库和命令行工具在内的Xamarin SDK已经成为开放源码,并且作为Visual Studio的一部分,可以在MIT许可下使用。通过消除许可证的主要障碍和成本,微软为平台的进一步发展铺平了道路。另外,由微软领导,并受到Unity,JetBrains和Red Hat,.NET基金会和Xamarin的支持,特别是已经成为一个可靠和强大的技术堆栈。

⊕简化维护

由于其跨平台应用,Xamarin使维护和更新变得更加简单。您可以简单地将更改或更新部署到源文件,并将它们应用于iOS和Android应用程序。但是,这仅适用于使用Xamarin.Forms或Xamarin.iOS和Xamarin.Android应用程序的业务逻辑,共享代码,更新的应用程序。因此,它可以帮助您节省时间和金钱,同时保持应用程序的最新状态。

⊕完整的开发生态系统

Xamarin包含一个完整的开发工具包,包括它自己的IDE(现在被Visual Studio取代的Xamarin Studio),平台本身(Xamarin SDK),测试(Xamarin测试云),分发和分析(Hockeyapp和Xamarin)。 Insights)平台。因此,您无需投资其他工具或集成第三方应用程序来构建,测试和部署您的Xamarin应用程序。

⊕Xamarin.Forms:简单的应用程序和原型的框架

Xamarin建议开发人员通过两种方式构建移动应用程序。第一个是使用Xamarin.iOS和Xamarin.Android,这被认为是主要的方法。使用Xamarin.Forms,Visual Studio库是第二个。Xamarin.Forms允许快速建立原型或生成具有较少平台特定功能的应用程序。这就是为什么Xamarin.Forms是代码共享比定制UI更重要的应用程序的最佳选择。您将能够创建单一界面并跨平台共享,无需为每个平台单独设计。您还可以构建应用程序,其中某些部分的用户界面是使用Xamarin.Forms构建的,其他部分则使用本机UI工具包进行设计。

尽管与Xamarin.iOS和Xamarin.Android相比,Xamarin.Forms在本地外观和感觉方面仍然存在折衷,但有一个充满活力的社区关注这个工具。例如,一些技术提供商为他们的Telerik UI等库提供丰富的工程功能,提供预先配置的UI组件。

⊕Xamarin.Forms直播播放器

由于Xamarin.Forms旨在实现快速和无摩擦的开发,Microsoft建议使用Live Player工具。这是安装在实际手机上的应用程序,可立即测试和调试您的应用程序,而无需仿真器部署或将设备绑定到工作站。安装Live Player后,开发人员将使用手机相机扫描Visual Studio中的QR码,以便访问当前开发的应用程序。手机上的应用程序与Visual Studio中的应用程序实时同步。这极大地简化了所有设置和进一步的调试过程。不幸的是,微软停止了对Live Player的支持,但您仍然可以下载该应用程序并将其与Visual Studio配对。

⊕使用Xamarin.Mac工具构建Mac应用程序

Xamarin.Mac允许使用C#和.NET开发完全原生的Mac应用程序。它集成了与Xcode在Objective-C中开发相同的库。通过将Xamarin.Mac与Xamarin.iOS和Xamarin.Android结合使用,开发人员可以在Android,iOS和Mac OS上共享高达90%的本机代码。此外,Xamarin.Mac与Xcode集成,因此开发人员可以使用Xcode的Interface Builder来创建应用程序的用户界面。

⊕Xamarin大学提供顺利的入职培训

Xamarin大学是一个专门的电子学习门户,供刚刚熟悉该软件包的人使用。大学迎合了认识C#的工程师以及具有一点编程经验的任何人。如果您只是将新工程师带到您的基于Xamarin的产品,大学将提供所有基本知识。该门户网站提供从初级到高级的课程,包括免费的自学,在线在线课程,办公室讲座和客座讲座。

Xamarin缺点考虑

但是,仍然有一些缺陷可以给平台蒙上阴影。那么,为什么不使用Xamarin?

Θ稍微延迟支持最新的平台更新

这完全取决于Xamarin开发团队。第三方工具不可能为最新的iOS和Android版本提供即时支持:实施这些更改和/或引入新的插件等需要一些时间。尽管Xamarin声称提供当天的支持,但仍然可能有些延误。

Θ对开源库的访问受限

本地开发广泛使用开源技术。使用Xamarin,您只能使用平台提供的组件和一些.Net开源资源,面向  开发人员和消费者。尽管选择并不像Android和iOS移动应用程序开发那样丰富,但Xamarin组件提供了数千个自定义UI控件,各种图表,图形,主题和其他强大的功能,可以仅添加到应用程序中点击次数很少。这包括内置支付处理(如Stripe),信标和可穿戴设备集成,开箱即用推送通知服务,云存储解决方案,多媒体串流功能等等。

ΘXamarin生态系统问题

显然,Xamarin社区比iOS或Android的小得多。因此,找到一个有经验的Xamarin开发人员可能是一个挑战。虽然该平台在微软的支持下正在增长。根据不同来源的信息,Xamarin社区占全球移动开发社会的10%。尽管Xamarin工程师的数量与iOS或Android本地社区无法比较,但该平台为其开发人员提供了广泛的支持。也就是说,有一个专门的教育平台,Xamarin大学,为那些对这项技术不熟悉的人提供资源和实践培训。使用这种支持,经验丰富的C#/ .Net工程师的学习曲线是最小的。

Θ需要有本地语言的基本知识

当使用Xamarin.iOS和Xamarin.Android构建具有真正本机外观和感觉的移动应用程序时,您仍然需要编写一个平台特定的代码层。因此,至少需要有关本机技术的基本知识(Android的Java / Kotlin和iOS的Objective-C / Swift)。但是,这并不适用于Xamarin.Forms。

Θ不适用于重图形应用程序

Xamarin的主要优势是能够跨平台分享您的代码。然而,你只能分享逻辑,UI代码将主要是平台特定的。这使得在Xamarin中构建游戏,丰富的自定义用户界面或复杂的动画变得毫无意义。使用少量的共享代码,Xamarin将变为不可行的选项。

Θ更大的应用程序大小

根据其类型和复杂性,Xamarin应用程序通常比本地应用程序大(后者可能是Xamarin应用程序的一半大小)。Android的一个简单的“hello,world”应用程序最多可能需要16 MB,其中大部分应用于关联的库,内容,Mono运行时和Base Class Library(BCL)程序集。

xamarin android调用远程数据 xamarin 开发_Xamarin_03

来源 - developer.xamarin.com

因此,Xamarin应用程序通常需要额外的优化来保持应用程序文件的大小合理。

Θ与第三方库和工具的兼容性问题

将第三方资源与您的Xamarin应用程序集成时可能会遇到一些问题。虽然大多数工具和库提供对本地技术的全面支持,但Xamarin合规性可能不会由vedor提供。尽管Xamarin拥有自己的组件商店,但您可能需要在您的应用中需要特定的功能或整合,而这些平台并未提供这些功能或整合。

Xamarin Visual Studio IDE

如果您有一种感觉Xamarin适合您,您将有兴趣知道可以使用的主要Xamarin IDE以及它们如何相互比较。

Visual Studio(VS)是Microsoft集成开发环境,用于在所有平台和设备上构建,调试和发布应用程序。Xamarin有三个主要的Visual Studio版本 - Visual Studio社区,Visual Studio Professional和Visual Studio Enterprise。选择可接受版本的关键因素是开发人员(学生或专业工程师)及其团队规模的经验。程序员可以为所有版本的Web,移动,服务器和桌面开发软件。

Visual Studio社区非常适合学生,开源项目以及多达5名用户的小型开发团队。社区软件包也适用于Visual Studio新手的团队。此版本可免费使用。

Visual Studio Professional是一组为专业开发人员,小团队和企业使用而创建的工具和服务。此版本提供了强大的功能,可以快速理解您的代码:显示代码引用,对代码的更改,显示上次修改方法的人员,或发现是否正在传递测试。专业版包括Team Foundation Server 2017,其中提供了诸如敏捷项目规划工具,交付计划,图表等功能。该版本的年费为每用户539美元。

Visual Studio Enterprise具有强大的支持工具和服务。它们允许管理开发和IT运营之间的复杂流程; 使用手动和自动跟踪工具跟踪质量; 获得专业培训; 和整个微软工程和测试生态系统。它包括Visual Studio Team Foundation Server和Visual Studio Team Services的Microsoft扩展。在此版本中,Team Foundation Server为您提供测试管理器,程序包管理和专用管道。企业版还有优先支持,合作伙伴优惠等等。Enterprise Studio的每年价格为每用户2,999美元。

对于企业用途,我们也建议检查  Visual Studio应用程序中心。它是一种组织应用程序开发工作流程的工具,涵盖Xamarin等不同的移动技术。在这里,工作在多个应用程序的工程团队可以将他们的工具集合在一起。它通过GitHub或Bitbucket自动化应用程序打包,为不同的测试服务提供集成,支持电子邮件应用程序分发以进行测试,确保崩溃跟踪和分析。

Visual Studio Online(VSO)是一套工具,它允许开发人员轻松设置跨不同平台的持续集成。持续集成是一种软件实践,所有代码更改都会立即进行测试并与主代码库集成。它有助于快速检查和调试代码。这个版本可能是移动开发人员最相关,最有趣的版本。

从Android Studio或Xcode切换到Visual Studio

如果您的开发团队考虑从Android Studio(AS)或Xcode转换到Visual Studio,则学习曲线不会那么陡峭。功能特性比较表明IDE在开发流程方面非常相似,每个环境都有细微的差别。

从Android Studio到Visual Studio。虽然Android Studio官方支持专注于Java,C / C ++,Kotlin和XML语言,但VS支持包括AS在内的所有主流编程语言。这是由于IDE迎合了各种各样的平台。VS提供了更多的工程自由,并允许在一个环境中处理不同的项目。如果您一直在使用与AS集成的Google Cloud Platform运行虚拟机或仅管理项目,Google还善于为VS 提供其云平台扩展。基本上,您可以直接从VS使用Microsoft云生态系统和Google Cloud。Visual Studio可以安装在所有主要平台上:Windows,Android,Mac OS和Linux。

从Xcode到Visual Studio。Xcode IDE与VS类似,支持所有主要编程语言的源代码。所以,过渡后不会有任何意外。同样,如果您在使用Xcode时与Mac OS绑定,则VS不需要Apple硬件。对于那些将CloudKit用于服务器端存储的人员,Visual Studio和Xamarin允许简单地集成CloudKit。使用VS与Xcode相比的主要缺点是相同的:Android Studio和Xcode都可以免费使用,而VS需要相当高的订阅费。

根据开发人员的估计,Visual Studio和Android Studio都具有大致相同的易用性级别和支持质量。将相同的索引与VS和Xcode进行比较,我们可以说VS估计值会更好一些。此外,Visual Studio在企业中更受欢迎(> 1000名员工),而大约50%的Android Studio和Xcode用户是小型企业(雇员人数不超过50人)。

考虑到Strategy Analytics在移动开发环境中的排名,Xcode和Visual Studio一样在测试能力方面排名最高。Android Studio落后。总分数为:Xcode-22; Visual Studio -21; 和Android Studio -13。

考虑其他选项:Xamarin vs Native iOS / Android与混合开发

最近,许多开发人员倾向于认为Xamarin可以被认为是“本地”开发工具。事实上,有一种观点认为,“ 使用Objective-C或Swift的iOS应用程序可以完成的任何事情,以及使用Java的Android应用程序可以完成的任何事情都可以使用Xamarin在C#中完成。”

然而,本土对Xamarin辩论存在许多缺陷。让我们看看Xamarin如何与本地开发工具和混合开发平台(Ionic,PhoneGap / Cordova)进行比较。

xamarin android调用远程数据 xamarin 开发_java_04

尽管混合移动开发工具正在迅速发展,但它们仍然缺乏Xamarin提供的性能和本地功能,成本大体相同。当考虑这两种方法时,最常见的两难问题是Xamarin vs Ionic或Xamarin vs React Native  (同时参阅我们关于ReactJS和React Native的优缺点的  全面解释)。但是,后者由于底层技术(Web堆栈)中的许多限制而趋于失败。

但是,基于JavaScript的移动开发工具至少在UI方面优于混合解决方案。它是NativeScript。这个由Telerik支持的跨平台开源框架允许您在使用单个代码库的同时实现本地UI并连接到本机API以获得更好的移动体验。它的主要区别在于它使用XML标记,它编译为Android和iOS原生等效物,而不是HTML webview。

这种方法填补了原生和混合开发之间的差距,类似于Xamarin的方式。这两种工具的主要区别在于它们使用的编程语言。因此,Xamarin与NativeScript的比较应该成为更详细研究的主题。

与此同时,Xamarin与原生Android / iOS开发辩论似乎更加复杂:两种选择都证明可以在产品质量和性能方面提供价值,但选择通常取决于您想要构建的应用程序的类型。

一点建议

在比较利弊时,列出的缺点通常被认为是附带损害。大多数企业主选择Xamarin移动应用开发平台,因为它通过共享代码和使用单个技术堆栈来缩短上市时间和降低工程成本。然而,应用程序及其目标受众的目的可能是更重要的考虑因素。

基于我们团队的经验,Xamarin的最佳使用案例是企业移动解决方案。通过覆盖90%项目的标准UI,所有核心产品逻辑都可以轻松地在各个平台上共享。因此,平台定制只需要5-10%的工程量。

如果面向消费者的应用程序拥有大量用户界面,则共享代码的数量会急剧下降。因此,Xamarin跨平台开发失去了其主要优势,并可能在时间和成本上与本地解决方案相当。

但是,如果您正在寻找Xamarin替代品来构建跨平台移动应用程序,那么您可能会感到失望。虽然使用最广泛的跨平台移动开发工具是PhoneGap / Apache Cordova,Ionic Framework,Appcelerator / Titanium,但它们主要依赖于Web技术,例如HTM5或JavaScript。这就是为什么这些工具都不能达到Xamarin提供的同等级别的性能和原生功能。