在过去的十年中,移动行业经历了巨大的增长,尤其是在应用程序开发方面。据Statista Reports统计,全球智能手机用户超过20亿,预计到2022年底,这一数字将超过50亿。在这些智能手机中,几乎100%运行在三种流行平台上:谷歌的Android、苹果的iOS和微软开发的Windows Mobile。一段时间以来,移动应用程序开发人员依赖特定于平台的工具来开发只能在单一平台上运行的本地应用程序。例如,Kotlin和Java主要用于开发Android原生移动应用程序,而iOS开发人员则使用Objective-C和最近的Swift,您可以在我们对这两种语言的比较中了解到。
原生移动应用开发的缺陷
传统的移动应用程序开发一直很慢且成本更高,因为企业必须为每个平台开发一个单独的应用程序,并且每个工具包都有不同的开发团队。今天,我们拥有跨平台的移动开发工具,帮助企业缩短开发时间,降低维护成本,并覆盖更多用户。Cross-platform mobile development(跨平台移动开发)仅意味着构建可在多个平台上运行的移动应用程序。目前开发人员可以使用多种跨平台框架,包括Intel XDK,Xamarin,Cordova和Flutter等。在本文中,我们将重点放在两个平台 - Xamarin和Flutter - 通过比较每个的特性,优势和缺点来帮助开发人员决定何时使用一个其中一个。您也可以查看我们的比较 Xamarin,React Native和Ionic平台。
Xamarin和Flutter框架概述
Xamarin可以说是微软领先的开源跨平台开发技术之一。它使用C#语言为Android,iOS和Windows Mobile设计移动应用程序。Xamarin允许开发人员访问原生的Android和iOS API,并通过Xamarin Testing Cloud.提供共享的C#代码库以及跨设备的应用程序进行测试。Xamarin是由Mono背后的开发人员于2011年创建的,它使用CLI(公共语言基础结构)和公共语言规范(也称为Microsoft .NET.)。微软在2016年收购了Xamarin,之后又将Xamarin SDK成为开源平台,成为Xamarin Visual Studio IDE不可或缺的一部分。为了充分利用Xamarin的潜力,开发人员除了C#之外还需要一些iOS和Android知识。
Flutter也是一个开源和免费的跨平台工具,由Google设计推出,允许开发人员为Android和iOS创建高性能的原生移动应用程序。该框架使用Google的Dart编程语言和轻量级C 引擎。与Xamarin类似,它提供了单一的代码库。该框架提供了用于2D渲染,模拟,手势和绘画的API和SDK,以及允许使用现有的Swift,Objective C和Java代码。它附带了Machine Design Widgets,也是Google产品。
比较Flutter和Xamarin
虽然Flutter在移动开发方面相对较新,其测试版于2018年1月推出,但Flutter跨平台开发框架引发了移动开发者在社区的一些兴趣与讨论。与Xamarin相比,不同的专家对这两个框架有不同的看法。Visual Studio Magazine的 David Ramel 指出,这种对比可以追溯到2015年谷歌首次推出Flutter,但是在MWC正式发布后,他们之间的对比引发了更强烈的社区讨论。
目前,Xamarin在开发者中更受欢迎,因为所有Stack Overflow 2018调查受访者中有7.2%表示他们使用Xamarin,微软声称拥有140万Xamarin工程师,而Flutter根本没有将其列入名单。Flutter社区还不够大。然而,一些工程师认为Flutter是Xamarin的新兴替代品。
下面我们将看看这两个框架的主要特征。虽然本文中的见解并不完全正确,但它们将为您提供两个框架的各自的优势以作参考
Xamarin vs Flutter的比较
可移植性
Flutter的目标是Android和iOS开发,而Xamarin则支持Android,iOS和Windows平台(即Windows 10 [UWP],Windows旧版[WPF]应用程序)以及MacOS应用程序。更大的生态系统使Xamarin比Flutter更具优势。事实上,Flutter应用程序无法移植到Windows移动平台并不是一个很大的缺点,因为Statista最近的一项调查称,尽管目前约有98.5%的智能手机可以在Android或iOS上运行。但是当你想为Windows mobile开发应用程序时,Xamarin适合这些所有场景。
Flutter与32位系统设备不兼容。因此,例如,如果您计划覆盖iPhone 5等旧手机,那么Xamarin将是更好的选择。
编程语言
Xamarin使用的C#很受开发人员的欢迎和广泛使用。如果您已具备C#和.NET技能,则可以立即使用Xamarin。如果您利用Xamarin.Forms,您可以在Xamarin中重复使用高达96%的C#代码。
Flutter使用相对较新且不受欢迎的Dart语言。但是,如果您有使用Java,JavaScript和C 等OOP语言的经验,那么学习Dart不会成为问题,因为它使用相同的方法和范例。
社区支持
Xamarin已经存在了一段时间,拥有大量的社区支持者,他们经验丰富并愿意与其他开发人员分享他们的知识。在Xamarin论坛上,致力于互相帮助的开发人员分享他们的代码和经验。该平台也得到了微软的支持,在解决常见问题时,这是一个很大的优势。Microsoft为其所有与Xamarin和.NET相关的产品提供了全面和最新的文档。
尽管Flutter得到了谷歌的支持,但它相对较新,目前缺乏社区支持。该平台也相当年轻,几个月前发布了测试版,这意味着开发人员尚未发现该框架的主要弱点和优势。
如果您正在计划一个长期的,复杂的项目,那么您应该选择Xamarin,其稳定性和问题已为人所知。然而,随着Flutter社区的发展,在一年之内,它可能会变得足够成熟,可以帮助解决大部分出现的问题。
访问本机操作系统
Flutter中的Dart代码使用AoT(Ahead of Time)编译为本机,但仍需要Dart VM(虚拟机)。AoT编译的主要原因是iOS平台不支持JIT或动态编译。Flutter还允许您构建支持特定于平台的代码的定制插件。
Flutter可以通过packages访问所有平台服务和包括存储和传感器的API。您还可以使用Flutter Libraries来实现用于从Dart调用原生函数。
lutter iOS和Android结构
在Xamarin中,C#代码被编译成机器代码,然后打包在.app中。mono生成器使用针对Xamarin.Android应用程序的JIT编译和针对iOS应用程序的AoT编译将中间机器代码(也称为托管代码)编译为本机平台代码。
Xamarin通过绑定使用.NET API和特定于平台的库来访问本机功能。
amarin iOS和Android架构
UI设计
虽然Xamarin使用本机UI组件是一件好事,但随着平台定期更新,它会带来成本,而框架可能需要更长时间才能适应新版本。这也使得Xamarin仅适用于逻辑代码共享,但不适合UI代码重用。最重要的是,我们建议使用本机模块来处理复杂的视觉效果,如游戏和动画。
Flutter使用内置小部件(widgets),而不使用本机UI组件。然后,小部件将根据您为其构建UI的平台进行进一步定制。目前,Flutter建议使用各种布局,基础小部件和平台来创建图形并支持2D API,手势,效果,动画和其他功能。虽然Flutter UI功能仍处于开发阶段,但它们有可能演变为功能强大的UI构建环境。此外,Flutter还配备了Material Design(一种UI描述“语言”)和Cupertino组件。
开发经验
Flutter中的热加载功能可帮助开发人员构建UI,实验并添加不同的功能,以及快速检测和修复错误,同时不会丢失模拟器上的状态。开发人员还可以访问本地功能,如第三方SDK和库,并重用现有的本机代码(Swift,Objective C,Java和Kotlin)。
Xamarin的一个优点是它允许开发人员通过Microsoft Xamarin Cloud在设备上测试应用程序。但是,您必须支付订阅费才能访问该功能。Xamarin还提供了实时重新加载功能,相当于Flutter中的热加载,它可以帮助开发人员修改XAML并在不编译或部署应用程序的情况下“实时”查看结果。
Xamarin问题之一是与第三方库的集成,这似乎在Flutter中更好地实现。
开发人员技能
Xamarin允许共享大约96%的C#代码,但如果您选择完全本机体验,则必须使用一些特定于平台的代码。因此,如果开发人员具有C#经验并且还可以处理Java,Kotlin,Swift和Objective-C等本机开发平台,则Xamarin是不二的选择。
要在Flutter中开发应用程序,您需要了解Dart,这可能需要您花时间学习,但如果您熟悉C#,Java和C ,这应该不是问题。如果您是移动应用程序开发的新手,并且没有Android或iOS应用程序开发经验,那么您必须学习Dart才能完成开发任务。
二进制和APK大小
根据去年Capital One的工程师Korhan Bicarn的测试,Flutter的基本应用程序的二进制大小为40.2 MB,而Xamarin等效的应用程序为25.1 MB。您可以在此处查看更详细的结果。从那时起,谷歌努力将基本Flutter应用的APK大小减少到4.28 MB,而Xamarin的大小则保持在7 MB左右。
内存,CPU和GPU利用率
根据相同的比较,初始化应用程序的地址空间和动态链接在Flutter中花费了1.05秒。该应用程序在大约220毫秒内启动,速度为58 FPS。在Xamarin中,应用程序的地址空间初始化和动态链接耗时3.2秒。该应用程序以大约345毫秒的速度启动,速度为53 FPS。您还可以在我们的专门文章中了解有关Xamarin性能的更多信息。
结论
虽然目前开发人员对Flutter很感兴趣,但这并不一定意味着Xamarin已经过时了。如果您不熟悉跨平台移动开发,那么考虑Flutter是有道理的,因为这个平台很可能在不久的将来变得热门。
但是,Xamarin目前在很多方面都比较成熟,包括社区,工具集和稳定性。通常,对于复杂和长期项目,我们建议坚持使用Xamarin,特别是如果您拥有一个C#和.NET开发人员团队并且随着微软不断拥抱开源,让您更积极拥抱微软技术,这更值得长期投入。
Flutter与Xamarin跨平台移动开发对比 https://www.altexsoft.com/blog/engineering/flutter-vs-xamarin-cross-platform-mobile-development-compared/