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