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

来源:https://www.cnblogs.com/zhangmumu/archive/2018/01/15/8287530.html
-Advertisement-
Play Games

剛在朋友圈看到張善友,轉發的一條分享“使用Xamarin實現跨平臺移動應用開發”,寫的確實很詳細得體,從收費到開源,這段時間xamarin受到不少質疑 ...


剛在朋友圈看到張善友,轉發的一條分享“使用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%,或是近乎使用Forms100%。這完全違背了我們使用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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現在網站基本都用手機註冊,很少用郵箱註冊,本篇內容比較多,代碼我會儘量加備註,有些操作需要連續添加幾個文件才不報錯,如果VS顯示錯誤,請繼續後續步驟。 前面已經有一篇文章講到集成簡訊發送模塊:http://www.cnblogs.com/shensigzs/category/1147235.html ...
  • 本篇開始進入重頭戲,之前的幾篇文章都是為了現在的功能作准備。前面教程已經講到修改User表結構,接下來就需要修改註冊邏輯代碼。 註冊頁面 修改Register.cshtml,備註如下代碼: 文件路徑:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0 ...
  • 進入 迅雷開發者中心 下載最新SDK與解碼庫 註:解壓最新SDK,運行install.bat。 解壓完美解碼庫將codecs文件拷貝到項目Debug下 轉載https://www.cnblogs.com/yanjinhua/ ...
  • 之前一起吃飯聽說了發票助手這個東西,可以生成發票抬頭的二維碼,掃碼就可以開票了。 官方也有個小程式的 【稅務發票助手】,微信中搜這個名字就可以了。 我準備在自己的小程式中也嘗試一下,本來覺得只要拼接一下生成二維碼就好了,結果發現不少坑。 具體的文檔參照github上的 "便捷開票二維碼應用規範.pd ...
  • 本文主要記錄.net Core項目發佈在Linux伺服器上面所遇到的問題,防止遺忘是 1、在發佈文件中執行 dotnet xxxxxx.dll的時候提示如下錯誤: An assembly specified in the application dependencies manifest (xxx. ...
  • 一般看到的 AppBarButton 都是圖片在上面,文字在下麵,是否可以更改讓文字在和圖片相同的位置?本文告訴大家如何做出橫向的 AppBarButton 把圖標和文本放在一起。 ...
  • 一、定義 MVC中ActionResult是Action的返回結果。ActionResult 有多個派生類,每個子類功能均不同,並不是所有的子類都需要返回視圖View,有些直接返迴流,有些返回字元串等。ActionResult是一個抽象類,它定義了唯一的ExecuteResult方法,參數為一個Co ...
  • 在使用EF SQLite的時候發現Like語句不能完全查詢出來,看了下生成的SQL語句類似於這種 查了下資料,在SQLite中是不支持CHARINDEX這個函數的,其實解決辦法很簡單,我們只要自己實現個Interceptor,再替換一下SQL語句,然後添加到EF中就可以了,下麵是Intercepto ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...