在過去十年中伏伯,移動行業(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)于這兩個框架的一些有利觀點。
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ù)的平臺通道矾利。
*Flutter iOS和Android結(jié)構(gòu) *
在Xamarin中,C#代碼被編譯成機器代碼馋袜,然后打包在.app中梦皮。mono代碼生成器使用針對Xamarin.Android應(yīng)用程序的JIT編譯和針對iOS應(yīng)用程序的AoT編譯將中間機器代碼(也稱為托管代碼)編譯為本機平臺代碼。
Xamarin通過綁定使用.NET API和特定于平臺的庫來訪問本機功能桃焕。
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)。