Flutter與Xamarin跨平臺移動開發(fā)相比

在過去十年中伏伯,移動行業(yè)經(jīng)歷了巨大的增長,特別是在應(yīng)用程序開發(fā)方面映企。據(jù)Statista報告稱吏夯,全球智能手機用戶超過20億,預(yù)計到2022年底這一數(shù)字將增加到50億以上勿她。在這些智能手機中袄秩,近100%在三個熱門平臺上運行:來自谷歌的Android ,Apple開發(fā)的iOS和Microsoft開發(fā)的Windows Mobile。一段時間以來之剧,移動應(yīng)用程序開發(fā)人員依賴于特定于平臺的工具來開發(fā)本機應(yīng)用程序郭卫,這些應(yīng)用程序只能在單一平臺上運行。例如背稼,Kotlin和Java主要用于開發(fā)Android原生移動應(yīng)用程序贰军,而iOS開發(fā)人員使用Objective-C和最近的Swift, 您可以在我們對這兩種語言的比較中閱讀這些內(nèi)容蟹肘。

原生移動應(yīng)用開發(fā)的缺陷

傳統(tǒng)的移動應(yīng)用程序開發(fā)一直很慢且成本更高词疼,因為企業(yè)必須為每個平臺開發(fā)一個單獨的應(yīng)用程序,并且每個工具包都有不同的開發(fā)團隊帘腹。今天贰盗,我們擁有跨平臺的移動開發(fā)工具,幫助企業(yè)縮短開發(fā)時間阳欲,降低維護成本舵盈,并覆蓋更多用戶∏蚧跨平臺移動開發(fā)僅意味著構(gòu)建可在多個平臺上運行的移動應(yīng)用程序秽晚。目前,開發(fā)人員可以使用多種跨平臺框架筒愚,包括Intel XDK赴蝇,Xamarin,Cordova和Flutter等锨能。在本文中扯再,我們將重點放在兩個方面 - Xamarin和Flutter - 通過比較每個的特性芍耘,優(yōu)勢和缺點來幫助開發(fā)人員決定何時使用一個而不是另一個址遇。您也可以查看我們的比較 Xamarin,React Native和Ionic平臺斋竞。

Xamarin和Flutter框架概述

Xamarin可以說是微軟運營的領(lǐng)先的開源跨平臺開發(fā)技術(shù)之一倔约。它使用C#語言為Android,iOS和Windows Mobile設(shè)計移動應(yīng)用程序坝初。Xamarin允許開發(fā)人員訪問原生的Android和iOS API浸剩,并通過Xamarin測試云提供共享的C#代碼庫以及跨設(shè)備的應(yīng)用測試。Xamarin是由Mono背后的開發(fā)人員于2011年創(chuàng)建的鳄袍,它使用CLI(公共語言基礎(chǔ)結(jié)構(gòu))和公共語言規(guī)范(也稱為Microsoft .NET)绢要。微軟于2016年收購了Xamarin,后來Xamarin SDK成為開源平臺拗小,成為Xamarin Visual Studio IDE不可或缺的一部分重罪。為了充分利用Xamarin的潛力,開發(fā)人員除了C#之外還需要一些iOS和Android知識。

Flutter也是一個開源和免費的跨平臺工具剿配,由Google設(shè)計搅幅,允許開發(fā)人員為Android和iOS創(chuàng)建高性能的本機移動應(yīng)用程序。該框架使用Google的Dart編程語言和輕量級C ++引擎呼胚。與Xamarin類似茄唐,它提供了單一的代碼庫。該框架提供用于2D渲染蝇更,模擬沪编,手勢和繪畫的API和SDK,以及允許使用現(xiàn)有的Swift年扩,Objective C和Java代碼漾抬。它配備了Machine Design Widgets,也是一款Google產(chǎn)品常遂。

flutter和Xamarin比較

盡管Flutter在移動開發(fā)方面相對較新纳令,其測試版于2018年1月推出,但Flutter跨平臺開發(fā)框架引發(fā)了移動開發(fā)者社區(qū)的一些討論克胳。與Xamarin相比平绩,不同的專家對這兩個框架有不同的看法。Visual Studio Magazine的 David Ramel 指出漠另,這一比較可以追溯到2015年谷歌首次推出Flutter時捏雌,但在MWC正式發(fā)布后,它們在2018年愈演愈烈笆搓。

目前性湿,Xamarin在開發(fā)者中更受歡迎,因為所有Stack Overflow 2018調(diào)查受訪者中有7.2%表示他們使用Xamarin满败,而微軟聲稱擁有140萬Xamarin工程師肤频,而Flutter根本沒有將其列入名單。Flutter社區(qū)還不夠大算墨。然而宵荒,一些工程師認為Flutter是Xamarin的新興替代品。

下面我們將看看這兩個框架的特征和主要特征净嘀。雖然本文中的見解并不完全確定报咳,但它們將為您提供關(guān)于這兩個框架的一些有利觀點。

image

Xamarin與Flutter的比較簡而言之

可移植性

Flutter的目標是Android和iOS開發(fā)挖藏,而Xamarin則支持Android暑刃,iOS和Windows平臺(即Windows 10 [UWP],Windows舊版[WPF]應(yīng)用程序)以及MacOS應(yīng)用程序膜眠。更大的生態(tài)系統(tǒng)使Xamarin比Flutter更具優(yōu)勢岩臣。事實上袁翁,F(xiàn)lutter應(yīng)用程序無法移植到Windows移動平臺并不是一個很大的缺點,因為Statista最近的一項調(diào)查稱婿脸,盡管目前約有98.5%的智能手機可以在Android或iOS上運行粱胜。但是當你想為Windows mobile開發(fā)應(yīng)用程序時,Xamarin可以是一個適合所有人的狐树。

Flutter與32位OS設(shè)備不兼容焙压。因此,例如抑钟,如果您計劃覆蓋iPhone 5等舊手機涯曲,Xamarin將是更好的選擇。

編程語言

Xamarin使用C#在塔,它受到開發(fā)人員的歡迎和廣泛使用幻件。如果您已具備C#和.NET技能,則可以立即使用Xamarin蛔溃。如果您利用Xamarin.Forms绰沥,您可以在Xamarin中重復(fù)使用高達96%的C#代碼。

Flutter使用相對較新且不受歡迎的Dart語言贺待。但是徽曲,如果您有使用Java,JavaScript和C ++等OOP語言的經(jīng)驗麸塞,那么學(xué)習(xí)Dart不會成為問題秃臣,因為它使用相同的方法和范例。

社區(qū)支持

Xamarin已經(jīng)存在了一段時間哪工,擁有大量的支持者社區(qū)奥此,他們經(jīng)驗豐富,愿意與其他開發(fā)人員分享他們的知識雁比。在Xamarin論壇上稚虎,致力于互相幫助的開發(fā)人員分享他們的代碼和經(jīng)驗。該平臺也得到了微軟的支持章贞,在解決常見問題時祥绞,這是一個很大的優(yōu)勢非洲。Microsoft為其所有與Xamarin和.NET相關(guān)的產(chǎn)品提供了體面和最新的文檔鸭限。

盡管Flutter得到了谷歌的支持,但它相對較新两踏,目前缺乏社區(qū)支持败京。該平臺也相當年輕,幾個月前發(fā)布了測試版梦染,這意味著開發(fā)人員尚未發(fā)現(xiàn)該框架的主要弱點和優(yōu)勢赡麦。

如果您正在計劃一個長期的朴皆,復(fù)雜的項目,那么您應(yīng)該選擇Xamarin泛粹,其穩(wěn)定性和問題已為人所知遂铡。然而,隨著Flutter社區(qū)的發(fā)展晶姊,在一年之內(nèi)扒接,它可能會變得足夠成熟,可以幫助解決大多數(shù)出現(xiàn)的問題们衙。

訪問本機操作系統(tǒng)

Flutter中的Dart代碼使用AoT(Ahead of Time)編譯編譯為本機钾怔,但仍需要Dart VM(虛擬機)。AoT編譯背后的原因是iOS平臺不支持JIT或動態(tài)編譯蒙挑。Flutter還允許您構(gòu)建支持特定于平臺的代碼的自定義插件宗侦。

Flutter可以通過包訪問所有平臺服務(wù)和API,包括存儲和傳感器忆蚀。您還可以使用Flutter Libraries來實現(xiàn)用于從Dart調(diào)用本機函數(shù)的平臺通道矾利。

image

*Flutter iOS和Android結(jié)構(gòu) *

在Xamarin中,C#代碼被編譯成機器代碼馋袜,然后打包在.app中梦皮。mono代碼生成器使用針對Xamarin.Android應(yīng)用程序的JIT編譯和針對iOS應(yīng)用程序的AoT編譯將中間機器代碼(也稱為托管代碼)編譯為本機平臺代碼。

Xamarin通過綁定使用.NET API和特定于平臺的庫來訪問本機功能桃焕。

image

Xamarin iOS和Android架構(gòu)

UI設(shè)計

雖然Xamarin使用本機UI組件是一件好事剑肯,但隨著平臺的定期更新,它會帶來成本观堂,而這可能需要更長時間才能使框架適應(yīng)新版本让网。這也使得Xamarin僅適用于邏輯代碼共享,但不適合UI代碼重用师痕。最重要的是溃睹,我們建議使用本機模塊來處理重型圖形,如游戲和動畫胰坟。

Flutter使用內(nèi)置小部件因篇,不使用本機UI組件。然后笔横,對于您正在構(gòu)建UI的平臺竞滓,預(yù)計小部件將進一步定制。目前吹缔,F(xiàn)lutter建議使用各種布局商佑,基礎(chǔ)小部件和平臺來創(chuàng)建圖形并支持2D API,手勢厢塘,效果茶没,動畫和其他功能肌幽。雖然Flutter UI功能仍處于開發(fā)階段,但它們有可能演變?yōu)楣δ軓姶蟮腢I構(gòu)建環(huán)境抓半。此外喂急,F(xiàn)lutter還配備了Material Design和Cupertino組件。

開發(fā)經(jīng)驗

Flutter中的熱重新加載功能可幫助開發(fā)人員構(gòu)建UI笛求,實驗并添加不同的功能煮岁,以及快速檢測和修復(fù)錯誤,同時不會丟失模擬器上的狀態(tài)涣易。開發(fā)人員還可以訪問本地功能画机,如第三方SDK和庫,并重用現(xiàn)有的本機代碼(Swift新症,Objective C步氏,Java和Kotlin)。

Xamarin的一個優(yōu)點是它允許開發(fā)人員通過Microsoft Xamarin Cloud在設(shè)備上測試應(yīng)用程序徒爹。但是荚醒,您必須支付訂閱費才能訪問該功能。Xamarin還提供實時重新加載功能隆嗅,相當于Flutter中的熱重新加載界阁,它可以幫助開發(fā)人員修改XAML并在不編譯或部署應(yīng)用程序的情況下“實時”查看結(jié)果。

Xamarin問題之一是與第三方庫的集成胖喳,這似乎在Flutter中更好地實現(xiàn)泡躯。

開發(fā)人員技能

Xamarin允許共享大約96%的C#代碼,但如果您選擇完全本機體驗丽焊,則必須使用一些特定于平臺的代碼较剃。因此,如果開發(fā)人員具有C#經(jīng)驗并且還可以處理Java技健,Kotlin写穴,Swift和Objective-C等本機開發(fā)平臺,Xamarin就會大放異彩雌贱。

要在Flutter中開發(fā)應(yīng)用程序啊送,您需要了解Dart,這可能需要您花時間學(xué)習(xí)欣孤,但如果您熟悉Java和C ++馋没,這應(yīng)該不是問題。如果您是移動應(yīng)用程序開發(fā)的先驅(qū)导街,并且沒有Android或iOS應(yīng)用程序開發(fā)經(jīng)驗披泪,那么您必須學(xué)習(xí)Dart才能完成任務(wù)。

二進制和APK大小

根據(jù)去年Capital One的工程師Korhan Bicarn的測試搬瑰,F(xiàn)lutter的基本應(yīng)用程序的二進制大小為40.2 MB款票,而Xamarin的等效應(yīng)用程序為25.1 MB。您可以在此處查看更詳細的結(jié)果泽论。從那時起艾少,谷歌努力將基本Flutter應(yīng)用的APK大小減少到4.28 MB,而Xamarin的大小則保持在7 MB左右翼悴。

內(nèi)存缚够,CPU和GPU利用率

根據(jù)相同的比較,初始化應(yīng)用程序的地址空間和動態(tài)鏈接在Flutter中花了1.05秒鹦赎。該應(yīng)用程序在大約220毫秒內(nèi)啟動谍椅,速度為58 FPS。在Xamarin中古话,應(yīng)用程序的地址空間初始化和動態(tài)鏈接耗時3.2秒雏吭。該應(yīng)用程序以大約345毫秒的速度啟動,速度為53 FPS陪踩。您還可以在我們的專門文章中了解有關(guān)Xamarin性能的更多信息杖们。

結(jié)論

雖然開發(fā)人員通常支持Flutter計劃,但這并不一定意味著Xamarin已經(jīng)過時了肩狂。如果您不熟悉跨平臺移動開發(fā)摘完,那么考慮Flutter是有道理的,因為這個平臺很可能在不久的將來變得熱門傻谁。

但是孝治,Xamarin目前在很多方面都比較成熟,包括社區(qū)审磁,工具集和穩(wěn)定性荆秦。通常,對于復(fù)雜和長期項目力图,我們建議堅持使用Xamarin步绸,特別是如果您擁有一個C#和.NET開發(fā)人員團隊并且您正在進入Microsoft生態(tài)系統(tǒng)。

本文翻譯:https://www.altexsoft.com/blog/engineering/flutter-vs-xamarin-cross-platform-mobile-development-compared/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吃媒,一起剝皮案震驚了整個濱河市瓤介,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赘那,老刑警劉巖刑桑,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異募舟,居然都是意外死亡祠斧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門拱礁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來琢锋,“玉大人辕漂,你說我怎么就攤上這事∥獬” “怎么了钉嘹?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鲸阻。 經(jīng)常有香客問我跋涣,道長,這世上最難降的妖魔是什么鸟悴? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任陈辱,我火速辦了婚禮,結(jié)果婚禮上细诸,老公的妹妹穿的比我還像新娘沛贪。我一直安慰自己,他們只是感情好揍堰,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布鹏浅。 她就那樣靜靜地躺著,像睡著了一般屏歹。 火紅的嫁衣襯著肌膚如雪隐砸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天蝙眶,我揣著相機與錄音季希,去河邊找鬼。 笑死幽纷,一個胖子當著我的面吹牛式塌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播友浸,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼峰尝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了收恢?” 一聲冷哼從身側(cè)響起武学,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伦意,沒想到半個月后火窒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡驮肉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年熏矿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡票编,死狀恐怖褪储,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情栏妖,我是刑警寧澤乱豆,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布奖恰,位于F島的核電站吊趾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瑟啃。R本人自食惡果不足惜论泛,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛹屿。 院中可真熱鬧屁奏,春花似錦、人聲如沸错负。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽犹撒。三九已至折联,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間识颊,已是汗流浹背诚镰。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留祥款,地道東北人清笨。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像刃跛,于是被迫代替她去往敵國和親抠艾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容