在过去十年中,移动行业经历了巨大的增长,特别是在应用程序开发方面。据Statista报告称,全球智能手机用户超过20亿,预计到2022年底这一数字将增加到50亿以上。在这些智能手机中,近100%在三个热门平台上运行:来自谷歌的Android ,Apple开发的iOS和Microsoft开发的Windows Mobile。一段时间以来,移动应用程序开发人员依赖于特定于平台的工具来开发本机应用程序,这些应用程序只能在单一平台上运行。例如,Kotlin和Java主要用于开发Android原生移动应用程序,而iOS开发人员使用Objective-C和最近的Swift, 您可以在我们对这两种语言的比较中阅读这些内容。
传统的移动应用程序开发一直很慢且成本更高,因为企业必须为每个平台开发一个单独的应用程序,并且每个工具包都有不同的开发团队。今天,我们拥有跨平台的移动开发工具,帮助企业缩短开发时间,降低维护成本,并覆盖更多用户。跨平台移动开发仅意味着构建可在多个平台上运行的移动应用程序。目前,开发人员可以使用多种跨平台框架,包括Intel XDK,Xamarin,Cordova和Flutter等。在本文中,我们将重点放在两个方面 - Xamarin和Flutter - 通过比较每个的特性,优势和缺点来帮助开发人员决定何时使用一个而不是另一个。您也可以查看我们的比较 Xamarin,React Native和Ionic平台。
Xamarin可以说是微软运营的领先的开源跨平台开发技术之一。它使用C#语言为Android,iOS和Windows Mobile设计移动应用程序。Xamarin允许开发人员访问原生的Android和iOS API,并通过Xamarin测试云提供共享的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在移动开发方面相对较新,其测试版于2018年1月推出,但Flutter跨平台开发框架引发了移动开发者社区的一些讨论。与Xamarin相比,不同的专家对这两个框架有不同的看法。Visual Studio Magazine的 David Ramel 指出,这一比较可以追溯到2015年谷歌首次推出Flutter时,但在MWC正式发布后,它们在2018年愈演愈烈。
目前,Xamarin在开发者中更受欢迎,因为所有Stack Overflow 2018调查受访者中有7.2%表示他们使用Xamarin,而微软声称拥有140万Xamarin工程师,而Flutter根本没有将其列入名单。Flutter社区还不够大。然而,一些工程师认为Flutter是Xamarin的新兴替代品。
下面我们将看看这两个框架的特征和主要特征。虽然本文中的见解并不完全确定,但它们将为您提供关于这两个框架的一些有利观点。
image
image
Xamarin与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位OS设备不兼容。因此,例如,如果您计划覆盖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可以通过包访问所有平台服务和API,包括存储和传感器。您还可以使用Flutter Libraries来实现用于从Dart调用本机函数的平台通道。
image
image
*Flutter iOS和Android结构 *
在Xamarin中,C#代码被编译成机器代码,然后打包在.app中。mono代码生成器使用针对Xamarin.Android应用程序的JIT编译和针对iOS应用程序的AoT编译将中间机器代码(也称为托管代码)编译为本机平台代码。
Xamarin通过绑定使用.NET API和特定于平台的库来访问本机功能。
image
image
Xamarin iOS和Android架构
虽然Xamarin使用本机UI组件是一件好事,但随着平台的定期更新,它会带来成本,而这可能需要更长时间才能使框架适应新版本。这也使得Xamarin仅适用于逻辑代码共享,但不适合UI代码重用。最重要的是,我们建议使用本机模块来处理重型图形,如游戏和动画。
Flutter使用内置小部件,不使用本机UI组件。然后,对于您正在构建UI的平台,预计小部件将进一步定制。目前,Flutter建议使用各种布局,基础小部件和平台来创建图形并支持2D API,手势,效果,动画和其他功能。虽然Flutter UI功能仍处于开发阶段,但它们有可能演变为功能强大的UI构建环境。此外,Flutter还配备了Material Design和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,这可能需要您花时间学习,但如果您熟悉Java和C ++,这应该不是问题。如果您是移动应用程序开发的先驱,并且没有Android或iOS应用程序开发经验,那么您必须学习Dart才能完成任务。
根据去年Capital One的工程师Korhan Bicarn的测试,Flutter的基本应用程序的二进制大小为40.2 MB,而Xamarin的等效应用程序为25.1 MB。您可以在此处查看更详细的结果。从那时起,谷歌努力将基本Flutter应用的APK大小减少到4.28 MB,而Xamarin的大小则保持在7 MB左右。
根据相同的比较,初始化应用程序的地址空间和动态链接在Flutter中花了1.05秒。该应用程序在大约220毫秒内启动,速度为58 FPS。在Xamarin中,应用程序的地址空间初始化和动态链接耗时3.2秒。该应用程序以大约345毫秒的速度启动,速度为53 FPS。您还可以在我们的专门文章中了解有关Xamarin性能的更多信息。
虽然开发人员通常支持Flutter计划,但这并不一定意味着Xamarin已经过时了。如果您不熟悉跨平台移动开发,那么考虑Flutter是有道理的,因为这个平台很可能在不久的将来变得热门。
但是,Xamarin目前在很多方面都比较成熟,包括社区,工具集和稳定性。通常,对于复杂和长期项目,我们建议坚持使用Xamarin,特别是如果您拥有一个C#和.NET开发人员团队并且您正在进入Microsoft生态系统。
- Xamarin跨平台移动开发解决方案
Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单.Xamarin的产品简化了针对多种平台的应用开发,包括iOS.Android.Windows Phone和Mac App.Xam ...
- Xamarin.Forms教程开发Xamarin.Forms应用程序需要的工具
开发Xamarin.Forms应用程序需要的工具 Xamarin.Forms教程开发Xamarin.Forms应用程序需要的工具,2014年5月8日在发布的Xamrin 3中引进了Xamarin.Fo ...
- Xamarin.Forms 移动开发
Xamarin 提供两种原生app开发技术:1. Xamarin Native, 包括 Xamarin.Android, Xamarin.iOS, Xamarin.Mac 2. Xamarin 跨平台 ...
- 跨平台移动开发UI语言 -XAML
Xamarin.Forms 把XAML (Extensible Application Markup Language, XAML) 带进了ios,android的界面开发,也就使得使用Xamarin ...
- 【转贴】-- 基于QT的跨平台应用开发
原帖地址:http://www.cnblogs.com/R0b1n/p/4106613.html 1 Qt简介 Qt是1991年奇趣科技开发的一个跨平台的C++图形用户界面应用程序框架.它提供给应用程 ...
- 跨平台移动开发工具:PhoneGap与Titanium全方位比拼
PhoneGap和Appcelerator Titanium,对于封装和配置移动应用程序而言,二者都是非常受欢迎的开源JavaScript框架.本文为Appcelerator开发者Kevin Whin ...
- 【Xamarin 跨平台机制原理剖析】
原文:[Xamarin 跨平台机制原理剖析] [看了请推荐,推荐满100后,将发补丁地址] Xamarin项目从喊口号到现在,好几个年头了,在内地没有火起来,原因无非有三,1.授权费贵 2.贵 3.原 ...
- 前端开发福音!阿里Weex跨平台移动开发工具开源-b
阿里巴巴今天在Qcon大会上宣布跨平台移动开发工具Weex开放内测邀请.Weex能够完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出Native级别的性能体验,并支持iOS.安卓.YunOS及 ...
- Xamarin改变移动开发的五个理由
企业开发者不能简单的抛弃现有的桌面和Web应用,然而又不得不忙着创建各种各样的应用,没有太多的预算来开发移动版本,尤其是原生版本. 采用Xamarin,C#开发人员可以使用一份基础代码创建桌面版和移动 ...
随机推荐
- Codeforces Round #456 (Div. 2) 912D D. Fishes
题: OvO http://codeforces.com/contest/912/problem/D 解: 枚举每一条鱼,每放一条鱼,必然放到最优的位置,而最优位置即使钓上的概率最大的位置,即最多的r ...
- 对JavaScript 模块化的深入-----------------引用
什么是模块化 好的代码模块分割的内容一定是很合理的,便于你增加减少或者修改功能,同时又不会影响整个系统. 为什么要使用模块 1.可维护性:根据定义,每个模块都是独立的.良好设计的模块会尽量与外部的 ...
- codeforces1209E2 状压dp,枚举子集
题意 给一个n行m列的矩阵,每一列可以循环移位,问经过任意次移位后每一行的最大值总和最大为多少. 分析 每一行的最大值之和最大,可以理解为每一行任意选择一个数使它们的和最大. 设\(dp[i][S]\ ...
- 修改checkbox样式-1
说明 使用伪类来对复选框进行样式修改.以下以最简单的一个样式修改为实例进行说明. 步骤介绍: 将一个label与复选框进行绑定,将两者放在同一个div下 调整 label的外部样式使其作为复选框的外形 ...
- 整个系统禁用复制功能下,js实现部分数据的复制功能
需求背景:整个系统禁止复制,列表页操作栏新增按钮来复制数据列的手机号功能 感受下是怎么回事?看下效果 (GIF有点点烂)
- go 两个数组取并集
实际生产中,对不同数组取交集.并集.差集等场景很常用,下面来说下两个数组取差集 直接上代码: //两个集合取并集 package main import "fmt" //思想: / ...
- ARP 之 发送请求arp_solicit
概述 arp_solicit用来发送ARP请求,首先会根据ARP_ANNOUNCE参数来选取源地址,然后判断是否达到内核发送次数上限,未达到则调用内核arp_send_dst函数发送,如果达到上限,则 ...
- arcgis python 判断是数据库或是文件夹
import arcpy # Create a Describe object # desc = arcpy.Describe("C:/Data/chesapeake.gdb") ...
- Arcgis python输出当前窗口
import arcpy mxd = arcpy.mapping.MapDocument("CURRENT") mxdfile=arcpy.GetParameterAsText(0 ...
- centos7修改默认启动模式(图形/命令行)
centos7以后是这样的,7以前就是别的版本了 1.systemctl get-default命令获取当前模式 2.systemctl set-default graphical.target 修改 ...