第215期 / September 5, 2015

研發新視界

分享到臉書!分享到維特!分享到噗浪!分享到Google+!分享到微博!轉寄友人友善列印

淺談跨平台程式語言-Xamarin

作者/許文瀚

[發表日期:2015/9/5]

前言

隨著智慧型手機日益龐大,行動裝置開發成為工程師不可或缺的領域之一。為因應使用者能在不同平台上瀏覽相同的資訊及內容,企業界及開發人員絞盡腦汁想出各種跨平台的解決方案搭配不同開發環境及程式語言達到目的。跨平台的解決方案不外乎是將相同的程式碼在任何支援的平台上編譯與執行,只須改一點程式甚至不需要修改,即能享有原生(Native)程式的功能及服務。

什麼是Xamarin

Xamarin的前身是Mono專案 ,使用c#語言Run在Linux平台上,也陸續支援ios及android的frameWork。2011 從Novell的Mono專案獨立出來的一家公司稱之為Xamarin。Xamarin是行動APP跨平台開發的解決方案之一,將原生的 ios及android API轉換成C# library提供給開發人員使用。開發人員透過呼叫原生平台API,可以在不同開發平台上共用程式碼,藉由Xamarin不需轉譯且直譯成二進制(binary)成執行檔,具備較好的效能。因能共用程式碼,省掉開發人員撰寫重複的程式碼,程式碼即能被重複使用,進而不需撰寫多種語言的程式碼,寫一次,程式碼可以相容於各種平台上。

Xamarin的主要功能如下:

1.跨平台開發:可採用C#來撰寫iOS, Android, Mac及Windows 等應用程式。

2.程式碼重用(Reuse):導入第三方函式庫。

3.智慧輸入:依據使用者輸入的內容對應至API,類似於搜尋引擎概念。

4.與Visual Studio 整合

5.原生的使用者介面及效能:完整對應各平台的Native API。

6.UI設計:整合各平台的設計界面。

任何在Objective-C與Java可以做的,也能在c#上達成。Xamarin將共有的商業邏輯抽離出來,能降低開發成本,例如資料需要使用到新增修改刪除的邏輯時,這段邏輯即可被當作共用的程式碼。圖一所示,程式人員撰寫ios、android及Windows Phone,可以專注地負責處理畫面呈現是否符合使用者所需的,不需要擔心不同平台間要如何撰寫的問題,Xamarin會依據不同平台提供編譯器進行編譯。


《圖一》商業邏輯相同部份抽離出來,提供給各平台共享程式碼(ios、android、Windows Phone)


無論是甚麼樣的跨平台程式語言,開發人員總有學不完的事,如程式的執行週期、使用者介面如何設計以及如何利用不同語言呼叫各種SDK的API等。Xamarin的出現,幫程式人員解決了那些?又帶來了哪些優點?

一、學習曲線降低:

對於程式人員而言學習的曲線已下降許多。當你是一個C#及.NET的愛好者,Xamarin實作相容了.NET Class的函式庫,你能透過熟悉的環境來開發程式。而當你並非c#及.NET的開發者,跨平台專案尚未普及時,你必須學習 Android及 ios兩種平台的程式語言(JAVA及Object-C)之一。不過利用Xamarin你只需學習一種程式語言C#及核心的功能即能有效Run在不同平台上。

二、保留各平台的原生性:

Xamarin保留ios 及Andriod的特性,包含ios及 Android平台特有的Class對應至.NET Class,並整合.NET Class將邏輯應用層面的程式碼進行共享。

三、快速的發佈至市場:

因Xamarin允許我們共享程式邏輯面的部份至ios及Android平台,而使用原生性的環境來處理,ios及Andriod則必須實作兩種不同語言的程式才能提供給這兩種平台,會花較多的程式碼。但Xamarin針對建造APP的特性開發後進行發佈,在發佈的部分,也能寫一次共享的程式碼即可以給多個平台重複沿用。

四、較少的BUG:

Xamarin發佈多個平台的程式碼享有沿用性,也因如此,撰寫程式碼越少,錯誤的機會也相對降低。在任何平台上專案的測試,可能因不同環境必須撰寫重複的程式碼測試,Xamarin避開了這些問題,針對不同平台提供單一、全面性的測試程式碼,減少開發人員的工作量。

五、 提升專案成員的一致性:

在原生性的開發環境,對於兩種平台(ios及Android)的開發可能會遇到以下幾件事:

1.工程師很難同時間撰寫兩種語言的程式碼,也往往無法精通兩者的使用方式及語法。
2.專案的成員可能會被分派至不同的平台上進行程式撰寫。

當遇上有問題時,只有相同平台上的成員有辦法協助解決問題。然而,Xamarin打破了此觀念,能讓專案所有成員使用.NET及C#開發程式碼,每個成員能有更充足的時間及更專精的能力支援需要幫助的成員,及有邏輯上的錯誤時,能更有效的檢視成員的程式碼並協助彼此,讓專案只需花最小時間即能獲得最快的效率,近而讓專案跑得更順利。

接下來,感受一下藉由Xamarin所帶來跨平台的能力,透過visual studio結合Andriod平台開發,本文實際撰寫了簡單的股票下單的頁面。

《圖二》頁面下單畫面


首先開啟Android的專案,開啟好後,先將下單頁面的設計部份定義好如《圖二》,

《圖三》取得股票名稱、價格及下單的控制項並進行事件綁定


接著在MainActivity的檔案裡取得下單畫面的控制項如《圖三》所示,取得各個控制項的元素、定義好各個事件的綁定如《圖四》,透過程式開發者自行定義的邏輯需要以及事件產生後決定回應何種畫面給使用者,這部分邏輯未來也都可以抽出來以提供不同平台作為共享資源,完成程式的撰寫執行的結果如《圖五》所示,



《圖四》事件綁定的邏輯並實現顯示的結果給使用者


輸入股票代號、價格並選擇股票下單交易方式,按下確定後,顯示如圖六的股票下單資訊給使用者。

《圖五》輸入股票名稱、價格及交易方式


《圖六》彈出股票下單資訊的內容


根據股票名稱及價格的控制項EditText、選擇不同的下單交易控制項 ListView,下單鈕的控制項Button及呼叫的方式等,基本上都保有原生Android平台上的功能,可以讓學習過Andriod及c#程式語言的工程師方便開發。

而對於跨平台的開發類型來說,可分為以下幾類, Mobile Web(HTML5、jQuery Mobile)、Hybrid(PhoneGap)、Cross Compiling(Xamarin)、Native App(Objective-C Java)、Interpreted App(Titanium)。Mobile Web主要用於瀏覽器的區塊,對於支援行動裝置的平台較弱。Hybrid、Interpreted App使用者介面以原生介面大不同,為前端技術為主,容易被攻擊,安全性較為薄弱。根據以上類型,相關研究人員[1]以跨平台能力、使用者經驗、離線能力、整合性與功能及學習門檻做出了比較,Mobile Web及Hybrid的跨平台能力高,其次為Interpreted App及Cross Compiling,能力最差的為Native App。Cross Compiling及Native App的使用者經驗最高。Mobile Web無提供離線能力。整合性與功能最強為Native App,其次為Cross Compiling。Mobile Web、 Hybrid和Interpreted App的學習門檻最低。

對於本文介紹的Xamarin是以Cross Compiling為應用,也針對上述其中的Hybrid 應用開發做了簡易的描述。Hybrid的代表作為PhoneGap,它採用統一的標準的HTML、CSS以及JavaScript等web技術開發建構跨平台的應用程序。同樣主打written once, run everywhere一次編譯四處可執行而受到關注,只需要更動少量的程式碼來實現跨平台的功能。為求進一步的了解,以先前簡易版的股票下單的頁面再次實作,透過Eclipse結合Android SDK 及PhoneGap2.2.0實作PhoneGap的平台。首先開啟Eclipse的專案,開啟好後,將下單頁面的設計部份定義好如《圖七》,

《圖七》頁面下單畫面


《圖八》設計股票代號、價格及下單確定鈕的控制項並進行事件綁定


設計的腳本在index.html檔案裡如圖八所示,設計各個控制項的元素、定義好各個事件的綁定,使用者輸入股票下單的內容如《圖九》所示,

《圖九》輸入股票名稱、價格及交易方式


最後透過程式開發者自行定義的邏輯需要以及事件產生後決定回應何種畫面給使用者,完成程式的撰寫執行的結果如《圖十》所示。

《圖十》彈出股票下單資訊的內容


完成簡易的股票下單頁面,那PhoneGap有那些優點?
若為PhoneGap開發人員不需要對各平台的資源直接操作,各平台與JavaScript之間存有PhoneGap API,能由JavaScript切換不同平台上的資源即可完成。因PhoneGap偏向Web上的語言,從事Web開發人員來學習,不儘可以降低人力成本,也可以減少應用產品的開發成本。

一、便於使用Web上的功能

相較於傳統的Web,PhoneGap提供了硬件可以透過JavaScript便於使用,如相機、指南針、GPS等功能。

二、相容於成熟JavaScript的框架

在網頁的世界越趨成熟,產出了相當多的JavaScript框架,最耳熟能詳的jQuery、Ext.js等,所需的移動式行動應用需求越龐大,勢必產生體積小的需求來因應,使用JavaScript能讓學習曲線降低。

三、便於安裝與使用

PhoneGap的架構複雜,但一般開發者不需了解內部的原理為何,只需簡單配置就可以建置好環境,並且只需專心地在Web頁面上寫code即可。

然而對於Xamarin及PhoneGap各自的缺點為何呢?

以Xamarin而言,相關文獻還太少,第三方函數庫也沒有原生平台這麼多。以現行功能,相較於Xcode及Android Studio還是有段差距、UI的制定還沒有很完善。商業軟體若有BUG比較不好追蹤是哪個框架有問題。而PhoneGap集結了多個平台的載入,是Web的頁面所以刷新重載的速度較慢,UI介面的速度比原生App來得慢,也受到webkit處理速度上的影響。效能相對較差。因屬於第三方的框架,支援各個平台的API還不完整。PhoneGap釋放內存的速度較慢。頁面的體驗感較差。需依靠其餘框架來輔助。

結論

對於此兩種跨平台的應用,取決於企業對產品的要求及產品本身的特性,若是Web應用則可以採取PhoneGap開發技術,反之以使用者用戶為導向的專案,則Xamarin會是個不錯的選擇,傳承了原生App特有的使用者介面。而除了文中所提到的現有開發框架,未來可能還會有更多新的跨平台的技術及應用,等著程式人員及企業不斷地嘗試及找出最合適的解決方案。

參考資料

1.Xamarin中文網站(by:昕力資訊)
2.Microsoft Virtual Academy/跨行動平台 App 開發概觀 -使用 Xamarin + Visual Studio
3.pluralsight blog