因為有個新專案,必須開發兩個平台iOS和Android,想要降低成本便選擇Xamarin這個方案,一年半前已經與同事們一起研究過它的特色,今日再次研究感覺特別不一樣,因為Xamarin又進化許多啦~
Xamarin有三個特色:
- Build:使用C#開發iOS、Android、Window Phone等App。
若商業用:依每平台每個人收費,如iOS與Android各兩人,費用是4倍。 - Test:線上測試App,有高達1000裝置可以使用。
若商業用:根據使用量計費。 - Monitor:追蹤App使用狀況,立即記錄到後台。
目前免費。
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#開發,編譯成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將原生 (Native)的iOS及Android API轉換為C#函式庫供使用者使用,開發人員可使用C#撰寫程式,並呼叫原生平台 (iOS, Android)的API,且透過良好的設計,可以在不同平台共用部份程式碼。
- 開發人員可透過Xamarin編譯器,直接將程式編譯為ARM的執行檔,並進行各平台的封裝。
- 編譯封裝完成的App由於不經過中間轉譯,直接編譯為原生的二進位執行檔,因此具有好的運作效能。
MVC設計模式
Xamarin支援MVC設計模式,開發者可以設計哪些是與使用者介面相關的部份,並將與平台無關的商業邏輯、服務存取、資料存取以及資料層從介面抽離出來,因此可將應用程式區分為兩部份,分別為core以及user interface,有效達到程式碼共享,讓設計架構更嚴謹。
程式碼共用
針對專案統合開發與程式碼共用,如圖左半邊所示,開發者可將抽離出來的共用程式碼獨立成一個專案 (Shared Code),並只加入常用的套件 (如Base Class Library),若有部份程式碼使用到與平台相關的套件或技術,可在程式碼中加入條件式編譯的指示詞,供各平台直接使用,不需要進行修改。
分開編譯
在各平台的專案中,開發者可以透過功能套件 (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 數量
- 調查時間:2015/01/14
- 網址:http://stackoverflow.com/questions/tagged/xamarin
平台 | 語言 |
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 |
.
不管如何,既然可以免費嘗試,那麼就下載來玩玩看吧!我已成功安裝後,透過官方初心者教學,成功將專案編譯執行到模擬器與實機上:)~
.
Comments on: "Xamarin 介紹與研究" (2)
[…] 想起我之前學過兩種跨平台工具:Xamarin和Ionic,前者以C#撰寫,後者以HTML+Javascript+CSS實現。先說結果,不想再碰這兩玩意兒XD~ […]
讚讚
[…] 在瞭解Xamarin介紹與研究後,接著就去下載並且安裝Xamarin Studio,再來當然就是要來跑「飯粒」專案囉~如此可快速上手Xamarin! […]
讚讚