使用Xamarin实现跨平台移动应用开发(转载)
剛在朋友圈看到張善友,轉(zhuǎn)發(fā)的一條分享“使用Xamarin實(shí)現(xiàn)跨平臺移動應(yīng)用開發(fā)”,寫的確實(shí)很詳細(xì)得體,從收費(fèi)到開源,這段時間xamarin受到不少質(zhì)疑,如此文http://blog.csdn.net/aofengdaxia/article/details/41891945/。當(dāng)然這篇隨筆也是轉(zhuǎn)載的(如果不寫成隨筆,大伙可能看不到這篇文章)。希望那些已經(jīng)入坑xamarin的開發(fā)者能有一個新的認(rèn)識
原文鏈接:http://www.infoq.com/cn/articles/mobile-cross-platform-xamarin
原文作者:Adriana Blum
本文要點(diǎn)
- 對移動應(yīng)用而言,跨平臺開發(fā)方式降低了開發(fā)和維護(hù)的代價。
- Microsoft收購Xamarin,這使得那些專注于Microsoft技術(shù)的企業(yè)受益匪淺。
- 自從Xamarin加入到Visual Studio中之后,其使用日益廣泛。當(dāng)然,這也要?dú)w因于它目前是開源和免費(fèi)的。
- Xamarin是“近乎原生”的。它將源代碼編譯為原生的iOS和Android。
- Xamarin.Forms、Test Cloud和Xamarin University使Xamarin平臺對開發(fā)人員更具吸引力。
作者?Adriana Blum?,譯者?蓋磊?發(fā)布于 2018年1月12日. 估計閱讀時間: 22 分鐘?
Xamarin曾是一種利基產(chǎn)品,售價昂貴。現(xiàn)在,它正逐漸成為一種廣為使用的移動應(yīng)用開發(fā)工具(參見鏈接給出幻燈片的第4張和第6張)。出于一些原因,Xamarin并不適用于某些類型的應(yīng)用,其本身也存在著不少缺點(diǎn)。對此,本文將做詳細(xì)的介紹。同時,Xamarin也是一種跨平臺的開發(fā)工具。因此,我們還將在本文中權(quán)衡跨各種平臺與原生開發(fā)上的一些優(yōu)缺點(diǎn)。下面,我們首先簡述Xamarin的推出及發(fā)展歷史。
從Gnome、Mono到Ximian
Miguel de Icaza是Gnome項(xiàng)目的創(chuàng)始人,他同時也是一位開源項(xiàng)目冠軍(Open Source Champion )。在他看來,要讓開源項(xiàng)目得到大眾的認(rèn)可,必須使該項(xiàng)目與Microsoft、Novell等公司提供的商業(yè)軟件毫無二致。出于此考慮,de Icaza于1999年開始和Nat Friedman合作。他們曾在1997年有過短暫的接觸,那是在de Icaza的一次不成功的Microsoft面試期間。當(dāng)時,de Icaza對Microsoft管理層指出,他們公司的軟件應(yīng)該走上開源之路。這次面試進(jìn)展的并不順利,但此后Friedman和de Icaza創(chuàng)立了Ximian項(xiàng)目,其中最主要的項(xiàng)目是Mono。Ximain于2003年被Novell收購,當(dāng)時Novell正試圖從Microsoft贏回它們?nèi)找嫖s的網(wǎng)絡(luò)市場份額。此后,Novell于2011年被Attachmate收購,而Attachmate裁剪掉了Mono項(xiàng)目的大部分資源。
相關(guān)廠商內(nèi)容
一堂課教你看懂技術(shù)創(chuàng)新與商業(yè)模式
QCon北京2018全新開啟
優(yōu)秀程序員應(yīng)該了解的開發(fā)實(shí)踐案例
年底最后一場干貨滿滿的出海峰會
這在de Icaza和Friedman看來,無疑是一個機(jī)會。因此,他們著手創(chuàng)立了另一個初創(chuàng)項(xiàng)目,即Xamarin,針對開發(fā)用于移動應(yīng)用開發(fā)的產(chǎn)品。他們的首個產(chǎn)品Xamarin.Mac在2012年發(fā)布,支持開發(fā)人員使用C#語言為Apple Mac編寫應(yīng)用并通過Apple Store銷售。在2013年,他們發(fā)布了Xamarin 2.0,這款I(lǐng)DE產(chǎn)品的推出,使開發(fā)人員可以使用Microsoft Visual Studio開發(fā)用于iOS、Android和Windows的應(yīng)用。但是該版本的一個主要缺點(diǎn)在于,Xamarin的許可費(fèi)用在當(dāng)時是非常昂貴的。
多年來,Microsfot一直關(guān)注著de Icaza的動向。在Microsoft看來,Xamarin就是公司真正需要的產(chǎn)品,因?yàn)閄amarin具有使用Visual Studio開發(fā)Android和iOS應(yīng)用的能力。這樣,Microsoft出手收購了Xamarin,并將Xamarin作為一種開源的IDE綁定到.NET中。這正是De Icaza多年前就希望Microsfot能去做的事情。
圖1 Xamarin的發(fā)展歷史(圖片來源:Craig Dunn的幻燈片)
跨平臺開發(fā)的案例
移動應(yīng)用開發(fā)主要有三種方式:原生的、跨平臺的和混合的。本文將不會介紹混合解決方案,因?yàn)檫@種解決方案通常無法達(dá)到原生的或真正跨平臺開發(fā)的質(zhì)量和穩(wěn)健性。
圖2 三種開發(fā)方式(圖片來源:Matt Larson在Xamarin Experience倫敦2017大會上演講幻燈片)
原生開發(fā)使用特定于設(shè)備平臺的編程語言和API。例如在iOS上,使用的是Objective C或Swift。盡管使用這種方式,開發(fā)人員能推出最適用于設(shè)備的產(chǎn)品,但其中也存在著一些嚴(yán)重的問題:
- 需要開發(fā)人員熟悉平臺語言和API。
- 增加了上市時間;
- 增大了維護(hù)代價。
在開發(fā)團(tuán)隊(duì)中問題
對于開發(fā)原生應(yīng)用,可能至少需要維護(hù)兩個團(tuán)隊(duì)。一個團(tuán)隊(duì)具備在iOS平臺上的Swift/Objective C開發(fā)技能,另一個團(tuán)隊(duì)具備在Android上的Java開展技能。甚至很有可能還需要維護(hù)第三個團(tuán)隊(duì),即具備Windows平臺開發(fā)技能的團(tuán)隊(duì)。我們還需要確保團(tuán)隊(duì)能保持最新的技能,并且人員不會被其它公司挖走,因?yàn)楫?dāng)前對這些技能的需求量很大。如果使用跨平臺的方法,并不能消除這個問題。但是該方法降低了開發(fā)人員入職所需的技能要求,問題得到了一定程度上的緩解。
在開發(fā)代碼和測試代碼時,如果需要維護(hù)多個基本上在做同一工作的團(tuán)隊(duì),這最終將會對開發(fā)成本產(chǎn)生影響。
增加了上市時間
當(dāng)公司中有多個不同的團(tuán)隊(duì)同時投身于應(yīng)用開發(fā)時,可能上市的時間會更長,因?yàn)檫@時會有兩個(或更多)的團(tuán)隊(duì)使用不同的語言在不同的平臺上編寫、測試和調(diào)試同一個應(yīng)用,而不是基于一個通用的C#技術(shù)棧。如果使用了跨平臺的方法,這將有助于縮短推出應(yīng)用所需的時間。
增大了維護(hù)代價和復(fù)雜性
消費(fèi)類電子產(chǎn)品企業(yè)出于維持自身客戶群的考慮,喜歡不斷地推出新款手機(jī),并不斷地對操作系統(tǒng)推陳出新。相應(yīng)地,應(yīng)用也需要做不斷地升級和更新。這使應(yīng)用開發(fā)團(tuán)隊(duì)忙于在新設(shè)備上測試應(yīng)用、發(fā)布新版本和補(bǔ)丁程序。如果使用跨平臺方式,那么我們可以在單個代碼庫上測試大部分或全部設(shè)備和更改。如果我們選擇的是獨(dú)立原生應(yīng)用,那么維護(hù)工作和發(fā)布時間安排會更為復(fù)雜。在一開始開發(fā)時,如果我們創(chuàng)建了一個原生應(yīng)用,那么時間和開銷將保持增長。公司將需要維護(hù)一個更大規(guī)模的開發(fā)團(tuán)隊(duì)。
圖3 特定于平臺的開發(fā)方式(圖片來源:Matt Larson在Xamarin Experience倫敦2017大會上演講幻燈片)
Xamarin跨平臺開發(fā)的優(yōu)點(diǎn)
跨平臺的開發(fā)方式具有很多優(yōu)點(diǎn),其中主要是減少了復(fù)雜性,從而降低了成本和工作量。盡管任一跨平臺解決方案都能有助于消除重復(fù)勞動,并具有更好的可維護(hù)性,但Xamarin還提供了其它一些優(yōu)點(diǎn)。下面列出其中部分優(yōu)點(diǎn):
- 提高了代碼的可重用能力;
- 在很大程度上減少了測試工作;
- 精簡了維護(hù);
- 提供全面的Xamarin環(huán)境;
- 可在Xamarin Test Cloud提供的兩千多臺設(shè)備上做實(shí)地測試;
- 近乎原生的性能;
- 支持地理位置和使用iBeacon。
功能的一次性開發(fā)
在Xamarin中,有超過70%的代碼可重用。這意味著,許多針對Android開發(fā)的功能,無需重寫全部內(nèi)容即可用于iOS。因此,開發(fā)人員一旦完成了針對某個環(huán)境的編碼和測試階段(無論是Android、iOS還是Windows),就可以將同一代碼用于其它環(huán)境,并使影響最小化。相比于使用原生開發(fā)方法,應(yīng)用可以更快地交付市場。
降低了測試時間和工作量
我們并非說要削減測試工作。無論應(yīng)運(yùn)行在何種設(shè)備上,無論選用何種開發(fā)方式,軟件測試都是任一應(yīng)用開發(fā)中的重要組成。但是,在一個操作系統(tǒng)(例如Android)上對大部分的功能測試和調(diào)試后,就會縮減在另一個操作系統(tǒng)(例如iOS)上的測試時間,因?yàn)椴糠止δ芤呀?jīng)在一個平臺上得以驗(yàn)證并測試。這樣,開發(fā)人員可以專注于一些特定于平臺的事項(xiàng)。相比起讓兩個團(tuán)隊(duì)以串聯(lián)方式工作于兩個不同的系統(tǒng)上,這種方式無疑降低了測試時間和工作量。
Xamarin環(huán)境
Xamarin提供的IDE功能全面,開發(fā)人員可以在IDE中執(zhí)行構(gòu)建最終產(chǎn)品所需的每個任務(wù)。Xamarin最近推出了Xamarin.Forms,進(jìn)一步簡化了開發(fā)。但依然需要開發(fā)人員具有Xamarin經(jīng)驗(yàn),以決定是使用Forms,還是堅持使用傳統(tǒng)的Xamarin開發(fā)。Xamarin官方推薦從Xamarin.Forms開始。
圖4 Xamarin與Xamarin.Forms的對比(圖片來源: Craig Dunn的幻燈片)
圖5 Xamarin.Forms與Xamarin原生開發(fā)的對比(圖片來源:Xamarin官方網(wǎng)站)
Xamarin還提供了線上的Xamarin University,有助于開發(fā)人員快速熟悉開發(fā)所需的各個領(lǐng)域。
訪問Xamarin Test Cloud
Test Cloud提供了一種應(yīng)用測試環(huán)境,支持開發(fā)人員在其中模擬真實(shí)世界情況對兩千多種真實(shí)手機(jī)進(jìn)行實(shí)地測試。Test Cloud并非免費(fèi)的,但是對于受廣大應(yīng)用目標(biāo)受眾青睞的多種目標(biāo)機(jī)型,使用Test Cloud無疑物有所值。此外,購買了Visual Studio Enterprise許可的組織,可以獲得Test Cloud的25%折扣。
性能近乎原生
在跨平臺方式和混合開發(fā)方式領(lǐng)域中,沒有競爭者的表現(xiàn)可與Xamarin相匹敵。其中的原因在于,Xamarin將源代碼編譯成二進(jìn)制對象,而許多競爭對手(例如Sencha和PhoneGap)僅在運(yùn)行時編譯。 在2015年,一位開發(fā)人員Harry Cheung在Android和Apple上做過一些對比測試。必須要承認(rèn)的是,測試當(dāng)時所用設(shè)備,現(xiàn)在看來完全過時了。這對于Xamarin而言尤其如此,特別是在iOS上。
圖6 iOS平臺上開發(fā)的應(yīng)用性能對比(圖片來源:Harry Cheung的Medium博客文章)
圖7 Android平臺上開發(fā)的應(yīng)用性能對比(圖片來源:Harry Cheung的Medium博客文章)
使用iBeacons和地理位置
如果用戶需要在應(yīng)用中使用Beacons和地理位置,那么Xamarin可以使用鄰近設(shè)備(其中包括Beacons和地理位置),支持定位和物聯(lián)網(wǎng)(IoT)。Xamarin與Estimote間有著良好的合作關(guān)系。Estimote制造設(shè)備,并提供可用于開發(fā)的Xamarin SDK。盡管用戶并非一定要局限Estimote的設(shè)備,但是Estimote設(shè)備的確可以使生活更輕松,因?yàn)榛谠O(shè)備開發(fā)的應(yīng)用可以通過iBeacons(或其它協(xié)議)接收現(xiàn)場信息,其中包括了IoT設(shè)備的報告和監(jiān)控情況。
Xamarin是跨平臺的,但是近乎原生
盡管上面我們已經(jīng)介紹了跨平臺開發(fā)的多個優(yōu)點(diǎn),但是在此我們還是要著重介紹Xamarin的一個亮點(diǎn)。Xamarin對于iOS和Android來說都是“近乎原生”的。為實(shí)現(xiàn)這一點(diǎn),Xamarin采用的一個方法是支持直接從C#調(diào)用開發(fā)人員使用Objective C/Swift for iOS及Java for Android的所有API。原生開發(fā)人員可用的標(biāo)準(zhǔn)用戶界面控件,也可以通過Xamarin訪問。這樣,一旦應(yīng)用運(yùn)行在設(shè)備上,就會給出正確的觀感。
盡管使用C#可以實(shí)現(xiàn)幾乎所有的 特性,但是其中可能依然需要少量的原生代碼。對于一名經(jīng)驗(yàn)豐富的Xamarin開發(fā)人員,這無疑是應(yīng)用開發(fā)中的一種福利,因?yàn)樗麄兛梢愿鶕?jù)自身過往的經(jīng)驗(yàn)決定調(diào)用情況。
Xamarin的適用之處
Xamarin具有強(qiáng)健的后端架構(gòu),非常適合于開發(fā)企業(yè)應(yīng)用,以及任何需要做大量后端開發(fā)的應(yīng)用。雖然Xamarin在需要功能豐富的用戶界面方面有一定局限性,但Xamarin仍然可以生成一些非常有吸引力的應(yīng)用。在本文稍后,我們將會給出一些案例研究。
Xamarin的最大優(yōu)勢在于開發(fā)時間以及跨平臺工作的效率上。由于競爭激烈,大多數(shù)移動應(yīng)用項(xiàng)目都給出了一個最后期限,Xamarin開發(fā)人員的開發(fā)速度無疑占優(yōu)。Xamarin的另一個優(yōu)勢在于它能使用Estimote SDK,集成Beacons和智能眼鏡等物聯(lián)網(wǎng)設(shè)備。
Xamarin是運(yùn)作在Microsoft生態(tài)系統(tǒng)中的,這一事實(shí)對于企業(yè)來說也是一大優(yōu)勢。其中的大多數(shù)企業(yè)已對Visual Studio等產(chǎn)品做了投資,并且很可能擁有一個穩(wěn)定的.NET開發(fā)團(tuán)隊(duì)。
Xamarin有不足之處
下面給出一些壞消息。在下列情況中,Xamarin并非最好的選擇:
- UI界面復(fù)雜(B2C情況下);
- 大量的動畫和圖形(例如,游戲);
- 仍然需要一些原生編程的情況下;
- 當(dāng)應(yīng)用會發(fā)展成很大的規(guī)模時;
- 需要使用特定的開源軟件庫的情況下;
- 如果開發(fā)人員不愿意支付Xamarin的許可費(fèi)用。
UI界面復(fù)雜
如果應(yīng)用面向的是最終用戶,并且需要提供豐富的前端功能,這時建議使用原生應(yīng)用。Xamarin.Forms足以應(yīng)對簡單的用戶界面,并可以受益于Xamarin優(yōu)異的后端功能。但是面對需要復(fù)雜用戶界面的應(yīng)用時,Xamarin是無法與原生SDK相媲美的。這是因?yàn)閕OS和Android的UI必須根據(jù)各自平臺的觀感分別進(jìn)行設(shè)計和實(shí)現(xiàn),最終可共享的應(yīng)用代碼將不足一半,達(dá)不到一般情況下的75%,或是近乎使用Forms時100%。這完全違背了我們使用Xamarin的初衷。因此,這時應(yīng)使用Objective C或Java。
圖形和動畫
Xamarin也并非開發(fā)游戲應(yīng)用的好選擇。Xamarin不適用于需要強(qiáng)大圖形或動畫的應(yīng)用。盡管如此,我們也不能完全排除使用Xamarin開發(fā)游戲。一個例子就是Bastion展示在iPad上的游戲。此外,Xamarin的最新發(fā)展將會使這一狀況有所改觀。
圖8 Bastion展示在iPad上的游戲(圖片來源:Jo Ann Buckner在Xamarin官方博客上的文章)
并非100%的解決方案
正如我們前面提到的,在一些情況下,要構(gòu)建一個完整的解決方案,我們可能仍然需要編寫少量的原生代碼。這意味著,開發(fā)人員仍然需要一些原生技能,這會降低Xamarin提供的優(yōu)勢。
訪問開源軟件庫上的限制
原生開發(fā)人員可以使用目標(biāo)平臺上所有可用的開源軟件庫。但是,Xamarin開發(fā)人員只能使用在Xamarin環(huán)境中的開源軟件庫,這通常數(shù)量更少。隨著Xamarin的日益普及,預(yù)計在未來這個問題將會逐漸消失。正如NuGet的最新發(fā)展所示。
Xamarin應(yīng)用的規(guī)模很大
Xamarin應(yīng)用的規(guī)模會更大一些。開發(fā)人員可能需要做一些額外工作,去優(yōu)化應(yīng)用的大小。如果一個應(yīng)用過大,安裝將花費(fèi)更多的時間,并可能在客戶手機(jī)上引發(fā)存儲和訪問問題,這會導(dǎo)致用戶考慮刪除該應(yīng)用。
Xamarin可能是免費(fèi)的,但是Visual Studio并非免費(fèi)的
由于Xamarin是捆綁在Visual Studio中的,開發(fā)人員會發(fā)現(xiàn)需要Visual Studio Professional或Enterprise版才能使用所需的功能。盡管入門級產(chǎn)品是免費(fèi)的,當(dāng)然其中也不會具備所有的特性。
Xamarin提供了標(biāo)準(zhǔn)許可和云許可,它們的價格可不便宜。下圖顯示了標(biāo)準(zhǔn)許可的報價,供讀者參考。
圖9 Xamarin許可報價(圖片來源:Xamarin官方網(wǎng)站)
一些使用Xamarin的成功案例
下面我們選取了幾個不同行業(yè)的公司作為案例。這些公司使用Xamarin取得了滿意的效果。
Siemens PLM
圖10 Siemens PLM應(yīng)用示例(圖片來源:Kyle Maxey發(fā)表在engineering.com上的文章)
Siemens PLM是由一些昂貴的工程軟件組合成的龐大產(chǎn)品,在全球擁有超過9百萬席位和7.7萬名用戶。Siemens希望能借助一款名為“Catchbook”的輕便移動繪圖和CAD應(yīng)用,進(jìn)一步擴(kuò)展公司的市場。在應(yīng)用中,用戶可以使用手指或觸筆繪制形狀。考慮到公司具備Microsoft的開發(fā)技能,卻不具備iOS或Android的開發(fā)技能,因此Siemens選擇了Xamarin。Xamarin提供的第一個優(yōu)勢,就是企業(yè)可以移植很多現(xiàn)有的代碼。其次,企業(yè)避免了學(xué)習(xí)原生iOS和Android開發(fā)語言的麻煩,就能讓75%的應(yīng)用運(yùn)行起來。
世界銀行
圖11 世界銀行應(yīng)用示例(圖片來源:Ann Buckne發(fā)表在Xamarin官方博客上的文章)
世界銀行有一個小開發(fā)團(tuán)隊(duì),由8位開發(fā)人員組成。團(tuán)隊(duì)成員熟悉Visual Studio和C#開發(fā),因此團(tuán)隊(duì)能夠使用Xamarin快速提高生產(chǎn)力。他們開發(fā)的一個復(fù)雜的調(diào)查系統(tǒng)只針對Android設(shè)備應(yīng)用。這是因?yàn)槭澜玢y行所面對的是發(fā)展中國家用戶,Android系統(tǒng)他們主要選擇的手機(jī)類型。
可口可樂裝瓶公司
圖12 可口可樂裝瓶公司應(yīng)用實(shí)例(圖片來源: Lacey Butler發(fā)表在Xamarin官方博客上的文章)
在短短的四個月時間內(nèi),全球最大的可口可樂裝瓶公司就將“MarketPlace”應(yīng)用投入運(yùn)行。與前面介紹的案例一樣,公司擁有具備.Net和C#技能的工作人員,他們十分熟悉Visual Studio,這就是公司對使用Xamarin有興趣的原因。公司引入了兩名經(jīng)驗(yàn)豐富的Xamarin開發(fā)人員來指導(dǎo)團(tuán)隊(duì)(順便說一句,他們在團(tuán)隊(duì)合作中使用了Slack。Slack也是使用Xamarin的)。
社區(qū)評論情況
Xamarin由于其敏捷性,使得產(chǎn)品能夠在最短的時間內(nèi)運(yùn)行起來,因此在一些移動應(yīng)用開發(fā)公司中廣受好評。下面給出在Clutch Review論壇中的一些評論。
“對于具有.NET和C#經(jīng)驗(yàn)的開發(fā)人員而言,他們希望開發(fā)工具能集成Microsoft技術(shù)棧后端。Xamarin無疑是一種極好的工具。”
“通過與Xamarin的合作,我們已成功地交付了大量的移動應(yīng)用。這些應(yīng)用得到了我們客戶的高度贊賞。例如,有一位客戶希望僅用正常時間的一半就交付一個應(yīng)用,因?yàn)樵搼?yīng)用將在一個大型活動中展示。正是由于Xamarin允許我們無縫地共享代碼,這使得我們能夠在最后期限內(nèi)完成任務(wù)。客戶非常高興。面對如此時間上的壓力,使用Xamarin總是更具優(yōu)勢。”
“如前所述,Xamarin最大的問題是在涉及到需要高度自動化的圖形或應(yīng)用時,就會面臨一些問題。”
結(jié)論
雖然Xamarin并非適用于任一移動應(yīng)用,但它的確是公司在選擇移動應(yīng)用開發(fā)中的考慮對象。應(yīng)用可能會相當(dāng)復(fù)雜,正如上面給出的企業(yè)案例所示。在企業(yè)環(huán)境中,Xamarin中使用C#作為首選語言,這使得其在眾多競爭對手中脫穎而出。自Microsoft收購Xamarin以來,市場也一直保持快速的增長。對于現(xiàn)有客戶來說,這無疑是一個好消息。
圖13 Xamarin的市場增長情況(圖片來源:Matt Larson在Xamarin Experience倫敦2017大會上演講幻燈片)
本文作者簡介
Adriana Blum任移動應(yīng)用開發(fā)公司Iflexion的高級技術(shù)架構(gòu)師。她在管理和交付定制移動解決方案上,擁有13年以上的經(jīng)驗(yàn)。她目前在幫助企業(yè)實(shí)現(xiàn)流程自動化、尋找新的發(fā)展機(jī)會,并創(chuàng)建可為企業(yè)帶來高價值的應(yīng)用。
查看英文原文:?Mobile Cross-platform Development with Xamarin
轉(zhuǎn)載于:https://www.cnblogs.com/zhangmumu/p/8287530.html
總結(jié)
以上是生活随笔為你收集整理的使用Xamarin实现跨平台移动应用开发(转载)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++搜索N皇后问题
- 下一篇: 简述基于JavaEE企业级开发技术(Sp