1. 程式人生 > >使用Xamarin實現跨平臺移動應用開發(轉載)

使用Xamarin實現跨平臺移動應用開發(轉載)

def acs catch live make asset book -a 開發語言

剛在朋友圈看到張善友,轉發的一條分享“使用Xamarin實現跨平臺移動應用開發”,寫的確實很詳細得體,從收費到開源,這段時間xamarin受到不少質疑,如此文http://blog.csdn.net/aofengdaxia/article/details/41891945/。當然這篇隨筆也是轉載的(如果不寫成隨筆,大夥可能看不到這篇文章)。希望那些已經入坑xamarin的開發者能有一個新的認識

原文鏈接:http://www.infoq.com/cn/articles/mobile-cross-platform-xamarin

原文作者:Adriana Blum

本文要點

  • 對移動應用而言,跨平臺開發方式降低了開發和維護的代價。
  • Microsoft收購Xamarin,這使得那些專註於Microsoft技術的企業受益匪淺。
  • 自從Xamarin加入到Visual Studio中之後,其使用日益廣泛。當然,這也要歸因於它目前是開源和免費的。
  • Xamarin是“近乎原生”的。它將源代碼編譯為原生的iOS和Android。
  • Xamarin.Forms、Test Cloud和Xamarin University使Xamarin平臺對開發人員更具吸引力。

作者 Adriana Blum

Xamarin曾是一種利基產品,售價昂貴。現在,它正逐漸成為一種廣為使用的移動應用開發工具(參見鏈接給出幻燈片的第4張和第6張)。出於一些原因,Xamarin並不適用於某些類型的應用,其本身也存在著不少缺點。對此,本文將做詳細的介紹。同時,Xamarin也是一種跨平臺的開發工具。因此,我們還將在本文中權衡跨各種平臺與原生開發上的一些優缺點。下面,我們首先簡述Xamarin的推出及發展歷史。

從Gnome、Mono到Ximian

Miguel de Icaza是Gnome項目的創始人,他同時也是一位開源項目冠軍(Open Source Champion )。在他看來,要讓開源項目得到大眾的認可,必須使該項目與Microsoft、Novell等公司提供的商業軟件毫無二致。出於此考慮,de Icaza於1999年開始和Nat Friedman合作。他們曾在1997年有過短暫的接觸,那是在de Icaza的一次不成功的Microsoft面試期間。當時,de Icaza對Microsoft管理層指出,他們公司的軟件應該走上開源之路。這次面試進展的並不順利,但此後Friedman和de Icaza創立了Ximian項目,其中最主要的項目是Mono。Ximain於2003年被Novell收購,當時Novell正試圖從Microsoft贏回它們日益萎縮的網絡市場份額。此後,Novell於2011年被Attachmate收購,而Attachmate裁剪掉了Mono項目的大部分資源。

相關廠商內容

一堂課教你看懂技術創新與商業模式

QCon北京2018全新開啟

優秀程序員應該了解的開發實踐案例

年底最後一場幹貨滿滿的出海峰會

這在de Icaza和Friedman看來,無疑是一個機會。因此,他們著手創立了另一個初創項目,即Xamarin,針對開發用於移動應用開發的產品。他們的首個產品Xamarin.Mac在2012年發布,支持開發人員使用C#語言為Apple Mac編寫應用並通過Apple Store銷售。在2013年,他們發布了Xamarin 2.0,這款IDE產品的推出,使開發人員可以使用Microsoft Visual Studio開發用於iOS、Android和Windows的應用。但是該版本的一個主要缺點在於,Xamarin的許可費用在當時是非常昂貴的。

多年來,Microsfot一直關註著de Icaza的動向。在Microsoft看來,Xamarin就是公司真正需要的產品,因為Xamarin具有使用Visual Studio開發Android和iOS應用的能力。這樣,Microsoft出手收購了Xamarin,並將Xamarin作為一種開源的IDE綁定到.NET中。這正是De Icaza多年前就希望Microsfot能去做的事情。

技術分享圖片

圖1 Xamarin的發展歷史(圖片來源:Craig Dunn的幻燈片)

跨平臺開發的案例

移動應用開發主要有三種方式:原生的、跨平臺的和混合的。本文將不會介紹混合解決方案,因為這種解決方案通常無法達到原生的或真正跨平臺開發的質量和穩健性。

技術分享圖片

圖2 三種開發方式(圖片來源:Matt Larson在Xamarin Experience倫敦2017大會上演講幻燈片)

原生開發使用特定於設備平臺的編程語言和API。例如在iOS上,使用的是Objective C或Swift。盡管使用這種方式,開發人員能推出最適用於設備的產品,但其中也存在著一些嚴重的問題:

  • 需要開發人員熟悉平臺語言和API。
  • 增加了上市時間;
  • 增大了維護代價。

在開發團隊中問題

對於開發原生應用,可能至少需要維護兩個團隊。一個團隊具備在iOS平臺上的Swift/Objective C開發技能,另一個團隊具備在Android上的Java開展技能。甚至很有可能還需要維護第三個團隊,即具備Windows平臺開發技能的團隊。我們還需要確保團隊能保持最新的技能,並且人員不會被其它公司挖走,因為當前對這些技能的需求量很大。如果使用跨平臺的方法,並不能消除這個問題。但是該方法降低了開發人員入職所需的技能要求,問題得到了一定程度上的緩解。

在開發代碼和測試代碼時,如果需要維護多個基本上在做同一工作的團隊,這最終將會對開發成本產生影響。

增加了上市時間

當公司中有多個不同的團隊同時投身於應用開發時,可能上市的時間會更長,因為這時會有兩個(或更多)的團隊使用不同的語言在不同的平臺上編寫、測試和調試同一個應用,而不是基於一個通用的C#技術棧。如果使用了跨平臺的方法,這將有助於縮短推出應用所需的時間。

增大了維護代價和復雜性

消費類電子產品企業出於維持自身客戶群的考慮,喜歡不斷地推出新款手機,並不斷地對操作系統推陳出新。相應地,應用也需要做不斷地升級和更新。這使應用開發團隊忙於在新設備上測試應用、發布新版本和補丁程序。如果使用跨平臺方式,那麽我們可以在單個代碼庫上測試大部分或全部設備和更改。如果我們選擇的是獨立原生應用,那麽維護工作和發布時間安排會更為復雜。在一開始開發時,如果我們創建了一個原生應用,那麽時間和開銷將保持增長。公司將需要維護一個更大規模的開發團隊。

技術分享圖片

圖3 特定於平臺的開發方式(圖片來源:Matt Larson在Xamarin Experience倫敦2017大會上演講幻燈片)

Xamarin跨平臺開發的優點

跨平臺的開發方式具有很多優點,其中主要是減少了復雜性,從而降低了成本和工作量。盡管任一跨平臺解決方案都能有助於消除重復勞動,並具有更好的可維護性,但Xamarin還提供了其它一些優點。下面列出其中部分優點:

  • 提高了代碼的可重用能力;
  • 在很大程度上減少了測試工作;
  • 精簡了維護;
  • 提供全面的Xamarin環境;
  • 可在Xamarin Test Cloud提供的兩千多臺設備上做實地測試;
  • 近乎原生的性能;
  • 支持地理位置和使用iBeacon。

功能的一次性開發

在Xamarin中,有超過70%的代碼可重用。這意味著,許多針對Android開發的功能,無需重寫全部內容即可用於iOS。因此,開發人員一旦完成了針對某個環境的編碼和測試階段(無論是Android、iOS還是Windows),就可以將同一代碼用於其它環境,並使影響最小化。相比於使用原生開發方法,應用可以更快地交付市場。

降低了測試時間和工作量

我們並非說要削減測試工作。無論應運行在何種設備上,無論選用何種開發方式,軟件測試都是任一應用開發中的重要組成。但是,在一個操作系統(例如Android)上對大部分的功能測試和調試後,就會縮減在另一個操作系統(例如iOS)上的測試時間,因為部分功能已經在一個平臺上得以驗證並測試。這樣,開發人員可以專註於一些特定於平臺的事項。相比起讓兩個團隊以串聯方式工作於兩個不同的系統上,這種方式無疑降低了測試時間和工作量。

Xamarin環境

Xamarin提供的IDE功能全面,開發人員可以在IDE中執行構建最終產品所需的每個任務。Xamarin最近推出了Xamarin.Forms,進一步簡化了開發。但依然需要開發人員具有Xamarin經驗,以決定是使用Forms,還是堅持使用傳統的Xamarin開發。Xamarin官方推薦從Xamarin.Forms開始。

技術分享圖片

圖4 Xamarin與Xamarin.Forms的對比(圖片來源: Craig Dunn的幻燈片)

技術分享圖片

圖5 Xamarin.Forms與Xamarin原生開發的對比(圖片來源:Xamarin官方網站)

Xamarin還提供了線上的Xamarin University,有助於開發人員快速熟悉開發所需的各個領域。

訪問Xamarin Test Cloud

Test Cloud提供了一種應用測試環境,支持開發人員在其中模擬真實世界情況對兩千多種真實手機進行實地測試。Test Cloud並非免費的,但是對於受廣大應用目標受眾青睞的多種目標機型,使用Test Cloud無疑物有所值。此外,購買了Visual Studio Enterprise許可的組織,可以獲得Test Cloud的25%折扣。

性能近乎原生

在跨平臺方式和混合開發方式領域中,沒有競爭者的表現可與Xamarin相匹敵。其中的原因在於,Xamarin將源代碼編譯成二進制對象,而許多競爭對手(例如Sencha和PhoneGap)僅在運行時編譯。 在2015年,一位開發人員Harry Cheung在Android和Apple上做過一些對比測試。必須要承認的是,測試當時所用設備,現在看來完全過時了。這對於Xamarin而言尤其如此,特別是在iOS上。

技術分享圖片

圖6 iOS平臺上開發的應用性能對比(圖片來源:Harry Cheung的Medium博客文章)

技術分享圖片

圖7 Android平臺上開發的應用性能對比(圖片來源:Harry Cheung的Medium博客文章)

使用iBeacons和地理位置

如果用戶需要在應用中使用Beacons和地理位置,那麽Xamarin可以使用鄰近設備(其中包括Beacons和地理位置),支持定位和物聯網(IoT)。Xamarin與Estimote間有著良好的合作關系。Estimote制造設備,並提供可用於開發的Xamarin SDK。盡管用戶並非一定要局限Estimote的設備,但是Estimote設備的確可以使生活更輕松,因為基於設備開發的應用可以通過iBeacons(或其它協議)接收現場信息,其中包括了IoT設備的報告和監控情況。

Xamarin是跨平臺的,但是近乎原生

盡管上面我們已經介紹了跨平臺開發的多個優點,但是在此我們還是要著重介紹Xamarin的一個亮點。Xamarin對於iOS和Android來說都是“近乎原生”的。為實現這一點,Xamarin采用的一個方法是支持直接從C#調用開發人員使用Objective C/Swift for iOS及Java for Android的所有API。原生開發人員可用的標準用戶界面控件,也可以通過Xamarin訪問。這樣,一旦應用運行在設備上,就會給出正確的觀感。

盡管使用C#可以實現幾乎所有的 特性,但是其中可能依然需要少量的原生代碼。對於一名經驗豐富的Xamarin開發人員,這無疑是應用開發中的一種福利,因為他們可以根據自身過往的經驗決定調用情況。

Xamarin的適用之處

Xamarin具有強健的後端架構,非常適合於開發企業應用,以及任何需要做大量後端開發的應用。雖然Xamarin在需要功能豐富的用戶界面方面有一定局限性,但Xamarin仍然可以生成一些非常有吸引力的應用。在本文稍後,我們將會給出一些案例研究。

Xamarin的最大優勢在於開發時間以及跨平臺工作的效率上。由於競爭激烈,大多數移動應用項目都給出了一個最後期限,Xamarin開發人員的開發速度無疑占優。Xamarin的另一個優勢在於它能使用Estimote SDK,集成Beacons和智能眼鏡等物聯網設備。

Xamarin是運作在Microsoft生態系統中的,這一事實對於企業來說也是一大優勢。其中的大多數企業已對Visual Studio等產品做了投資,並且很可能擁有一個穩定的.NET開發團隊。

Xamarin有不足之處

下面給出一些壞消息。在下列情況中,Xamarin並非最好的選擇:

  • UI界面復雜(B2C情況下);
  • 大量的動畫和圖形(例如,遊戲);
  • 仍然需要一些原生編程的情況下;
  • 當應用會發展成很大的規模時;
  • 需要使用特定的開源軟件庫的情況下;
  • 如果開發人員不願意支付Xamarin的許可費用。

UI界面復雜

如果應用面向的是最終用戶,並且需要提供豐富的前端功能,這時建議使用原生應用。Xamarin.Forms足以應對簡單的用戶界面,並可以受益於Xamarin優異的後端功能。但是面對需要復雜用戶界面的應用時,Xamarin是無法與原生SDK相媲美的。這是因為iOS和Android的UI必須根據各自平臺的觀感分別進行設計和實現,最終可共享的應用代碼將不足一半,達不到一般情況下的75%,或是近乎使用Forms時100%。這完全違背了我們使用Xamarin的初衷。因此,這時應使用Objective C或Java。

圖形和動畫

Xamarin也並非開發遊戲應用的好選擇。Xamarin不適用於需要強大圖形或動畫的應用。盡管如此,我們也不能完全排除使用Xamarin開發遊戲。一個例子就是Bastion展示在iPad上的遊戲。此外,Xamarin的最新發展將會使這一狀況有所改觀。

技術分享圖片

圖8 Bastion展示在iPad上的遊戲(圖片來源:Jo Ann Buckner在Xamarin官方博客上的文章)

並非100%的解決方案

正如我們前面提到的,在一些情況下,要構建一個完整的解決方案,我們可能仍然需要編寫少量的原生代碼。這意味著,開發人員仍然需要一些原生技能,這會降低Xamarin提供的優勢。

訪問開源軟件庫上的限制

原生開發人員可以使用目標平臺上所有可用的開源軟件庫。但是,Xamarin開發人員只能使用在Xamarin環境中的開源軟件庫,這通常數量更少。隨著Xamarin的日益普及,預計在未來這個問題將會逐漸消失。正如NuGet的最新發展所示。

Xamarin應用的規模很大

Xamarin應用的規模會更大一些。開發人員可能需要做一些額外工作,去優化應用的大小。如果一個應用過大,安裝將花費更多的時間,並可能在客戶手機上引發存儲和訪問問題,這會導致用戶考慮刪除該應用。

Xamarin可能是免費的,但是Visual Studio並非免費的

由於Xamarin是捆綁在Visual Studio中的,開發人員會發現需要Visual Studio Professional或Enterprise版才能使用所需的功能。盡管入門級產品是免費的,當然其中也不會具備所有的特性。

Xamarin提供了標準許可和雲許可,它們的價格可不便宜。下圖顯示了標準許可的報價,供讀者參考。

技術分享圖片

圖9 Xamarin許可報價(圖片來源:Xamarin官方網站)

一些使用Xamarin的成功案例

下面我們選取了幾個不同行業的公司作為案例。這些公司使用Xamarin取得了滿意的效果。

Siemens PLM

技術分享圖片

圖10 Siemens PLM應用示例(圖片來源:Kyle Maxey發表在engineering.com上的文章)

Siemens PLM是由一些昂貴的工程軟件組合成的龐大產品,在全球擁有超過9百萬席位和7.7萬名用戶。Siemens希望能借助一款名為“Catchbook”的輕便移動繪圖和CAD應用,進一步擴展公司的市場。在應用中,用戶可以使用手指或觸筆繪制形狀。考慮到公司具備Microsoft的開發技能,卻不具備iOS或Android的開發技能,因此Siemens選擇了Xamarin。Xamarin提供的第一個優勢,就是企業可以移植很多現有的代碼。其次,企業避免了學習原生iOS和Android開發語言的麻煩,就能讓75%的應用運行起來。

世界銀行

技術分享圖片

圖11 世界銀行應用示例(圖片來源:Ann Buckne發表在Xamarin官方博客上的文章)

世界銀行有一個小開發團隊,由8位開發人員組成。團隊成員熟悉Visual Studio和C#開發,因此團隊能夠使用Xamarin快速提高生產力。他們開發的一個復雜的調查系統只針對Android設備應用。這是因為世界銀行所面對的是發展中國家用戶,Android系統他們主要選擇的手機類型。

可口可樂裝瓶公司

技術分享圖片

圖12 可口可樂裝瓶公司應用實例(圖片來源: Lacey Butler發表在Xamarin官方博客上的文章)

在短短的四個月時間內,全球最大的可口可樂裝瓶公司就將“MarketPlace”應用投入運行。與前面介紹的案例一樣,公司擁有具備.Net和C#技能的工作人員,他們十分熟悉Visual Studio,這就是公司對使用Xamarin有興趣的原因。公司引入了兩名經驗豐富的Xamarin開發人員來指導團隊(順便說一句,他們在團隊合作中使用了Slack。Slack也是使用Xamarin的)。

社區評論情況

Xamarin由於其敏捷性,使得產品能夠在最短的時間內運行起來,因此在一些移動應用開發公司中廣受好評。下面給出在Clutch Review論壇中的一些評論。

“對於具有.NET和C#經驗的開發人員而言,他們希望開發工具能集成Microsoft技術棧後端。Xamarin無疑是一種極好的工具。”

“通過與Xamarin的合作,我們已成功地交付了大量的移動應用。這些應用得到了我們客戶的高度贊賞。例如,有一位客戶希望僅用正常時間的一半就交付一個應用,因為該應用將在一個大型活動中展示。正是由於Xamarin允許我們無縫地共享代碼,這使得我們能夠在最後期限內完成任務。客戶非常高興。面對如此時間上的壓力,使用Xamarin總是更具優勢。”

“如前所述,Xamarin最大的問題是在涉及到需要高度自動化的圖形或應用時,就會面臨一些問題。”

結論

雖然Xamarin並非適用於任一移動應用,但它的確是公司在選擇移動應用開發中的考慮對象。應用可能會相當復雜,正如上面給出的企業案例所示。在企業環境中,Xamarin中使用C#作為首選語言,這使得其在眾多競爭對手中脫穎而出。自Microsoft收購Xamarin以來,市場也一直保持快速的增長。對於現有客戶來說,這無疑是一個好消息。

技術分享圖片

圖13 Xamarin的市場增長情況(圖片來源:Matt Larson在Xamarin Experience倫敦2017大會上演講幻燈片)

本文作者簡介

Adriana Blum任移動應用開發公司Iflexion的高級技術架構師。她在管理和交付定制移動解決方案上,擁有13年以上的經驗。她目前在幫助企業實現流程自動化、尋找新的發展機會,並創建可為企業帶來高價值的應用。

查看英文原文: Mobile Cross-platform Development with Xamarin

使用Xamarin實現跨平臺移動應用開發(轉載)