在過去十年中,移動行業經歷了巨大的增長,特別是在應用程序開發方面。據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生態系統。
