Just a Computer Graphics Studio & My Life

Xamarin 介紹與研究

因為有個新專案,必須開發兩個平台iOSAndroid,想要降低成本便選擇Xamarin這個方案,一年半前已經與同事們一起研究過它的特色,今日再次研究感覺特別不一樣,因為Xamarin又進化許多啦~

Xamarin

Xamarin有三個特色:

  • Build:使用C#開發iOS、Android、Window Phone等App。
    若商業用:依每平台每個人收費,如iOS與Android各兩人,費用是4倍。
  • Test:線上測試App,有高達1000裝置可以使用。
    若商業用:根據使用量計費。
  • Monitor:追蹤App使用狀況,立即記錄到後台。
    目前免費。

Xamarin feature

Xamarin簡介

  • Xamarin是由早期的Mono專案演變而來,原本是在Linux上執行C#程式的一個開放原始碼專案。
  • 後來陸續發表支援iOS的Mono Touch framework以及Mono For Android Framework。因此它在市場上並不是一個新的產品。
  • 2011年,原本在Novell的Mono專案團隊獨立成立一家公司,正式將名稱改為Xamarin。
  • Xamarin是一個行動App開發平台,提供跨平台開發能力,開發人員透過Xamarin開發工具與程式語言,即可開發出iOS、Android與Windows等平台的原生(Native) App 應用程式。
  • 不須個別使用各平台的開發工具與程式語言,不只是「write-once, run everywhere」的跨平台解決方案,更可達到「write your code once, and present native UIs on each platform.」之跨平台開發能力。
  • 由於Xamarin可直接產生各平台之原生App應用程式,相較於其他跨平台方案,藉由Xamarin所開發出來的App應用程式,更能發揮出各行動平台的功能與特性,且具有最佳的執行效能。

觸及裝置

C# Xamarin

特色

  • 以C#開發,編譯成iOS與Android原生執行碼,非HTML5解決方案
  • 任何Objective-C (iOS)與Java (Android)可以做的,Xamarin都可以做到
  • 執行效能100%與原平台程式 (Objective-C, Java)所開發的一樣
  • 結合Microsoft Visual Studio開發工具,讓開發更方便、快速

跨平台開發

Xamarin可以使用熟悉的C#來撰寫iOS, Android, Mac及Windows應用程式。

程式碼重用 (Reuse)

使用最愛的C#及.NET函式庫,輕鬆使用第三方的Native Library及Framework。

智慧輸入

開發應用程式時,開發工具會偵測輸入的部份字母,尋找對應的API並自動完成輸入。

Visual Studio 整合

在Visual Studio中建立、建置、除錯以及部署。 還可以使用喜愛的plug-in,例如ReSharper以及與TFS整合。

原生的使用者介面及效能

Xamarin 帶給高效能的體驗並完整對應各個平台的Native API。因此透過Xamarin,建立的應用程式可以完全發揮裝置特有的性能。

UI設計

可在Visual Studio中同時整合Android與iOS的UI設計功能,讓我們在同一開發環境輕鬆完成操作畫面設計 !

其它解決方案比較

Xamarin其它解決方案比較

原理說明

Xamarin是市場上少數提供原生解決方案的跨平台行動開發工具,原生應用程式應該包含以下特性:

使用標準的使用者介面並符合各個行動平台的設計準則。

搭配裝置硬體以提供最佳化的效能。

能夠完整存取裝置硬體上的功能。

  • Xamarin將原生 (Native)的iOS及Android API轉換為C#函式庫供使用者使用,開發人員可使用C#撰寫程式,並呼叫原生平台 (iOS, Android)的API,且透過良好的設計,可以在不同平台共用部份程式碼。
  • 開發人員可透過Xamarin編譯器,直接將程式編譯為ARM的執行檔,並進行各平台的封裝。
  • 編譯封裝完成的App由於不經過中間轉譯,直接編譯為原生的二進位執行檔,因此具有好的運作效能。

MVC設計模式

Xarmarin MVC設計模式

Xamarin支援MVC設計模式,開發者可以設計哪些是與使用者介面相關的部份,並將與平台無關的商業邏輯、服務存取、資料存取以及資料層從介面抽離出來,因此可將應用程式區分為兩部份,分別為core以及user interface,有效達到程式碼共享,讓設計架構更嚴謹。

程式碼共用

Xamarin 程式碼共用

針對專案統合開發與程式碼共用,如圖左半邊所示,開發者可將抽離出來的共用程式碼獨立成一個專案 (Shared Code),並只加入常用的套件 (如Base Class Library),若有部份程式碼使用到與平台相關的套件或技術,可在程式碼中加入條件式編譯的指示詞,供各平台直接使用,不需要進行修改。

分開編譯

Xamarin 分開編譯

在各平台的專案中,開發者可以透過功能套件 (Project Linker),以檔案連結的方式,將共用程式碼的部份連結到各平台專案。在開發平台專案時,只要針對使用者介面以及針對控制項的操作撰寫程式即可。對於商業邏輯或資料存取的部份,則可以在各平台共用,這是使用原生的開發方式(Objective-C、Java)所無法達到的。開發完成後,即可透過Xamarin的編譯器進行編譯。Xamarin為不同的平台提供編譯器。在iOS平台,Xamarin使用AOT編譯,在Android平台,則使用JIT編譯,將C#程式碼直接編譯為ARM CPU的機器碼,以得到最佳效能。

使用者端調查

以上描述幾乎為官方說法,至於在實際使用上可能會遇到困難要解決。大學同學在某家公司同時開發iOS和Android,問他們有沒有考慮過Xamarin解決方案,他說只是稍微研究,坦言在兩者平台介面差異相當大,在介面上不是最佳解。

此外查詢網友的使用心得,儘管是一年以前的紀錄,多少也有參考價值!

發表時間:2013/8/27

  • 用Xarmin開發Android要另外學,而且資源比較少
  • 客製化元件建議不要走Xamarin
  • 使用SDK會比較麻煩,須寫Java轉接檔,如使用Facebook或AdMob,要寫一份Java轉接檔,讓C#抓得到那些Java Method
  • 要看他們支援的能力與價錢如何
  • 進階功能或技術支援時,開始大筆鈔票流失
  • 很多都是Java語法,首字大寫就變C#

發表時間:2014/2/27

  • 使用Xamarin還是得去學Android和iOS的app架構
  • 有MVC開發基礎的人比較容易上手
  • VS這強大的IDE本身就能幫你解決許多問題
  • Eclipse是神器,VS就是開外掛
  • C#非常好上手,猴子也會做
  • 共通的部分不用使用不同的語言重寫
  • 三大平台,這邊參考那邊引用,即可解決
  • 需要花力氣開發的是View,Solution不多
  • 搜尋解法關鍵字「Mono」
  • 沒有非要跨平台的需求根本自虐
  • Coding速度還好,Compiling超級慢

發表時間:2013/04/05

  • 新項目,用戶少,資源少,遇到提要自己硬啃,不然要等幾天時間官方技術支援
  • API更新總是慢於原生API提供商,也就是無法即時使用最新API
  • 因是商業軟體,想要研究可行性就要花錢

以上有些看似是問題,但實際上Xamarin已經克服,可用資源方面也持續增加~

StackOverFlow Tag 數量

平台 語言
Xamarin:5622 C#:742176
iOS:299787 Objective-C:214602
Android:615680 Java:778543

.

GitHub Repository 數量

  • 調查時間:2015/01/14
  • 網址:https://github.com/search?q=xamarin
平台 Repository Code
Xamarin 2095 169922
iOS 62493 9645233
Android 166027 45194646

.

不管如何,既然可以免費嘗試,那麼就下載來玩玩看吧!我已成功安裝後,透過官方初心者教學,成功將專案編譯執行到模擬器實機上:)~

.

參考:Xamarin官方網站Xamarin台灣代理網站

廣告

Comments on: "Xamarin 介紹與研究" (1)

  1. […] 在瞭解Xamarin介紹與研究後,接著就去下載並且安裝Xamarin Studio,再來當然就是要來跑「飯粒」專案囉~如此可快速上手Xamarin! […]

    喜歡

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: