Visual Studio跨平臺開發實戰(1) - Hello Xamarin!

原文 Visual Studio跨平臺開發實戰(1) - Hello Xamarin!android

前言ios

應用程式發展的腳步, 歷來沒有停過. 從早期的Windows 應用程式, 到網路時代的web 應用程式, 再到近幾年至關盛行的行動裝置應用程式(Mobile Application), 身爲C#的開發人員與Visual Studio的使用者. Windows Phone與Windows Store App的開發是否已知足不了你了呢? 若是可以讓你使用C#及Visual Studio 來開發iOS及Android的app. 是否能再度喚醒你的開發魂? Xamain正是爲了這樣的需求而誔生的framework.web

簡介架構

Xamarin是由早期的Mono專案演變而來,本來是在Linux上執行C#程式的一個開放原始碼專案.後來陸續發表支援iOS的Mono Touch framework以及Mono For Android Framework.所以它在市場上並非一個新的產品. 2011年, 本來在Novell的Mono專案團隊獨立成立一家公司, 正式將名稱改成Xamarin, 此爲Xamarin的由來. Xamarin 具備如下特色:app

  • 快速創建原生(Native)的行動裝置應用程式 -透過C#親和且功能齊全的語言特性,搭配.NET Framework的Base Class Library(BCL)的便利性.讓開發人員能以最高的生產力開發行動裝置應用程式. 目前Mono支援C# 5.0的語言規範, 這意味着開發人員能夠用您熟悉的Lambda Expression, LINQ 甚至是Async/Await的非同步處理. 
  • 程式碼共用 -現行由Objective-C所開發的iOS應用程式以及由Java所開發的Android應用程式,沒法達到程式碼共用. Xamarin則是採用C#撰寫,所以透過良好的設計,能夠在不一樣平臺間共用商業邏輯以及資料存取等程式, 毋需從新撰寫. 除了省下從新撰寫的時間成本外, 對於版本維護及一致性也有至關大的助益. 
  • 與Visual Studio整合 – Xamarin提供了Visual Studio 2010/2012的plug-in,讓本來就熟悉Visual Studio的開發者不用再熟悉其餘的開發工具.在創建專案時,能夠直接創建iOS及Android的專案範本.固然, 開發團隊也能夠將iOS及Android的程式碼歸入到ALM, 使用Team Foundation Server進行版本及建置的管理. 
  • 確保第一時間更新 – Xamarin對於iOS及Android的版本更新竭盡全力,在iOS SDK 5.0, 6.0以6.1,都與Apple在同一天發表對應的Framework版本, 7.0也承諾會在同一天發表.而Android方面, Xamarin甚至將Android的原始碼, 從本來的Java改由C#從新撰寫, 並且效能也獲得大幅的提高. 
  • 原生的應用程式效能 – Xamarin針對iOS及Android平臺開發編譯器.將C#程式碼直接編譯成ARM CPU的機器碼.所以效能將與原生模式開發的應用程式相比,沒有不一樣.而在Android系統上, 因爲Xamarin 不使用Android的Dalvik 虛擬機器, 改成採用CLR, 經測試其效能更甚於原生的應用程式.

系統需求ide

  • iOS :因爲Apple限制iOS應用程式編譯都須要透過Xcode,所以須要1臺MAC的機器做爲Build Host.
    • Windows 7 或更新的做業系統版本
    • Visual Studio 2010 / 2012
    • OS X Lion 或更新的做業系統版本
    • Xcode IDE 以及iOS SDK
  • Android :對於Android開發,則能夠徹底在Windows上進行.其系統需求以下:
    • Windows 7 或更新的做業系統版本
    • Java SDK
    • Android SDK
    • Xamarin.Android for Visual Studio

安裝Xamarin工具

不管是在Windows或是MAC上安裝Xamarin都至關簡單,只要在http://xamarin.com/download上填入名稱及Email賬號,即可以進行下載.而只要依照安裝精靈點選下一步,就能夠將Android SDK等相關元件裝好.佈局

clip_image002

Windows 版安裝晝面:post

clip_image004

MAC版安裝畫面:開發工具

clip_image006

Xamarin 是一個商業的Framework, 但您能夠完整試用30天, 或是使用免費版本. 但免費版本限制開發人員編譯後的IL code大小不能超過32K, 且沒法使用Visual Studio進行開發(只能使用Xamarin提供的Xamarin Studio).

安裝好Xamarin以後, 須要註冊一個Xamarin賬號進行啓動.

1. 開啓Visual Studio, 點選工具=>Xamarin Account

clip_image007

2. 若先前已經註冊過Xamarin賬號(請注意, Xamarin賬號與先前下載所填的Email不一樣), 請直接輸入賬號密碼登入,若您是第一次使用, 請申請新的Xamarin賬號.

clip_image009 clip_image011

登入後即可以開始開發Android及iOS應用程式囉!!

使用Visual Studio開發Android HelloWorld!

使用Xamarin 開發Android應用程式可說是至關的方便, 不只支援在Visual Studio中使用拖曳的方式設計使用者介面, 還整合如AVD及SDK Manager等工具. 廢話很少說, 開始咱們在Visual Studio上的第1支Android程式吧~

1. 在Visual Studio 中新增專案, 在專案範本中, 請展開C#節點, 你會發現專案範本會多出Android及iOS類型的專案範本, 咱們在這個範例中選擇」Android Application」, 並在名稱中輸入"HelloDroid」 (固然您能夠改爲任何您想要的名稱)

clip_image013

2. 專案創建後, 您會發現工具列中多出幾個項目:

clip_image014

說明以下(由左至右):

  • 目標裝置:能夠選擇將目前的專案部署到哪個裝置, 預設的"Prompt for Device」則是會在開始除錯/部署時, 彈出視窗供使用者選擇. 如有接上實體裝置, 也會出如今此選單中.

clip_image015

  • 裝置記錄: 能夠挑選裝置並顯示目前裝置的活動記錄.

clip_image017

  • 開啓Android 虛擬裝置管理員(AVD), 透過此管理員, 您能夠新增,開啓或編輯Android模擬器.

clip_image019

  • Android SDK管理員:因爲Android版本(API Level)衆多, 您能夠在這個管理介面, 安裝所需的SDK版本及元件。

clip_image021

3. 預設的專案中會內建一個Button控制項並寫着"Hello World, Click Me!」, 開啓專案下的Resources->Layout->Main.axml能夠進行頁面的設計。

clip_image023

4. 而此範例的主要程式碼則是Activity1.cs, 直接透過下圖的註解來講明:

clip_image025

看到這樣的程式碼, 我想你們應該都不會感到陌生. 筆者有一些學員跟我說, 感受跟開發Windows Form應用程式好像~~

Activity1.cs 至關於MVC分層的Controller. 透過SetContentView方法, 告訴系統要載入哪個頁面. 接着透過FindViewById方法取得畫面上按鈕的物件實體. 接着即可以針對按鈕的屬性或方法撰寫相關的程式碼, 或是處理按鈕的事件. 如上圖所示, 預設的範例是使用匿名方法, 咱們將它註解後, 改用Lambda Expression來撰寫.

5. 接着按下F5, 即可以開始進行除錯, 若沒有預先開啓Android模擬器, 則Running devices列表會是空的, 這時能夠點擊下方的"Start emulator image」連結來啓動模擬器.

clip_image026

6. 執行結果以下:

clip_image028 clip_image030

是否是至關簡單呢? 接下來咱們來開始iOS的Hello World.

使用Visual Studio開發iOS HelloWorld!

與開發Android不一樣, 目前Xamarin還沒有支援在Visual Studio中設計應用程式頁面, 但官方表示目前已在研發當中, 並會在不久以後的版本提供此功能. 所以目前iOS專案的UI設計必須透過MAC的Interface Builder (XCode的一部份), 或是直接在程式中宣告控制項的位置及大小, Visual Studio中的HelloWorld Application即是使用此方法.

1. 在Visual Studio 中新增專案, 在專案範本中選擇iOS下的iPhone, 並在右邊的範本中選擇HelloWorld Application, 接着指定專案名稱(此處爲HelloIOS)

clip_image032

2. 第一次開啓iOS專案時, Xamarin會提示使用者只有在商業版或更高的版本才能在Visual Studio中開發iOS專案.

clip_image034

接着Xamarin便會自動啓用試用版本的受權, 啓動完畢後, 會提示使用者Visual Studio將會從新啓動.

clip_image036 clip_image038

若您MAC上的Xamarin受權還沒有啓動, 將會看到系統提示, 說明Build Server(也就是MAC)還沒有啓用受權. 此時按下Activate按鈕可能沒有做用, 請依照下面的步驟, 在MAC上啓用Xamarin受權.

clip_image039

3. 因爲Xamarin在MAC上預設是以避免費版本開啓. 所以能夠透過如下方法強制啓用Xamarin試用受權. 首先在MAC的Finder開啓Xamarin Studio

clip_image041

新增一個專案, 選擇iPhone =>Single View Application. 專案創建後, 點擊功能表中的專案=>Profile - Mono

clip_image043 clip_image045

此時會看到受權啓用的畫面. 當完成啓用後, 咱們就能夠回到Visual Studio來指定咱們的Build Host.

clip_image047 clip_image049

4. 在Visual Studio的工具=>選項中, 能夠看到多出了一個Xamarin節點, 點擊Xamarin下的iOS Settings, 在右邊能夠指定Mac Build Host.您能夠直接輸入MAC的電腦名稱或IP位址,或按下Configure 進行設定.

clip_image051 clip_image053

在設定視窗中, Xamarin會搜尋同一網段中已安裝並啓用Xamarin的MAC機器. 若狀態顯示爲"Ready", 請按下Connect進行連線.

若狀態不是"Ready」, 能夠按下Diagnose按鈕進行連線診斷. 以下圖所示, 若某一個或多個項目沒法經過連線診斷, 則會出現failed, 您能夠展開failed的項目瞭解失敗的緣由.

clip_image055

5. 請在組態管理中, 將平臺設定爲iPhoneSimulator, 預設爲部署至實體機器, 但這須要向Apple申請付費的開發者賬號.

clip_image056

接着在工具列中, 能夠選擇iOS 模擬器的版本, 右邊綠色打勾的符號表示已與MAC Build Host的連線正常, 如果反灰的狀態, 請按一下右邊的 clip_image057 圖示從新與指定的Build Host連線.

clip_image058

5. 開啓專案中的MyViewConrtoller.cs 檔. 在此範例中, 一樣是在畫面中間放置一個Button控制項(在iOS中的類別名稱爲UIButton)並顯示點擊的次數. 因爲咱們是在程式中產生控制項, 所以有部份程式碼是在宣告物件的佈局屬性, 請參考下圖中程式碼的註解:

clip_image059

6. 接下來纔是範例程式的重點, 若您是在XCode中設計好UI, 則能夠取代上面的程式.

clip_image060

如同先前Android的HelloWorld, 在iOS中, 按鈕的點擊事件不叫Click, 而是TouchUpInside, 所以咱們透過此事件的處理, 在使用者點擊了按鈕後, 改變按鈕的顯示文字(使用UIButton的SetTitle方法) . 最後將Button控制項透過View.AddSubview方法加入到畫面當中.

執行結果以下:

clip_image062

跨平臺開發簡介

做爲一個跨平臺的解決方案, 使用Visual Studio 搭配Xamarin開發行動裝置應用程式具備如下特點:

  • 能夠在同一個方案中包含全部平臺的專案: 包括Windows Phone, Windows 8 Store App, iOS以及Android. 以下圖所示:

clip_image063

  • 程式碼共享:在設計時, 將與平臺無關的商業邏輯、服務存取、資料存取以及資料層從介面抽離出來, 以下圖所示:

clip_image064

底下說明如何才能達成上述的專案整合以及程式碼共用, 首先來看看架構示意圖:

clip_image065

從上述的示意圖, 咱們能夠看到, 左半邊是能夠抽離出來的共用程式碼, 這部份將獨立成一個專案, 並只加入經常使用的組件(如Base Class Library), 如有部份程式碼使用到與平臺相關的組件或技術,能夠在程式碼中加入條件式編譯的指示詞,供各平臺直接使用,不須要進行修改.

而在各平臺的專案中, 能夠透過檔案連結的方式, 將共用程式碼的部份連結到各平臺專案. 但因爲目前Visual Studio並無提供能夠同時設定多個檔案或整個資料夾連結的方式,所以若每一個檔案都要手動連結, 實際上是較不實際的. 並且往後共用程式碼專案如有檔案的異動, 如新增或刪除. 各平臺專案並不會同步更新. 此時咱們能夠透過1個叫作」Project Linker 2012」的擴充功能進行協助(它也有對應Visual Studio 2010的版本).

clip_image067

安裝好Project Linker後, 咱們即可以在各平臺專案點擊滑鼠右鍵=>Add project link

clip_image068

接着選擇來源專案, 以後便會爲來源專案的每一個資料夾及檔案進行連結.

clip_image070

連結的檔案在Visual Studio中都會有個藍色箭頭的圖示

clip_image072

透過上述的設定後, 即可以在各平臺專案共用程式碼. 在開發平臺專案時, 只要針對使用者介面以及針對控制項的操做撰寫程式便可. 對於商業邏輯, 資料存取的部份則能夠在各平臺共用, 這是使用原生的開發方式(Objective-C, Java)所沒法達到的. 實際執行結果以下:

clip_image073 clip_image075

clip_image077 clip_image078

結語

本文說明了Xamarin 的特點以及開發架構. 但願透過簡單的範例讓第一次接觸的開發人員可以當即着手進行安裝及開發. 在接下來的系列文章中, 將會介紹如何使用Xamarin及Visual Studio 使用iOS以及Android的基本控制項及多頁面的串接.

參考資訊

http://blog.xamarin.com/android-in-c-sharp/

http://www.thinkpower.com.tw/xamarin_intro.aspx

http://docs.xamarin.com/guides/ios/getting_started

http://docs.xamarin.com/guides/android/getting_started

本文同時刊載於MSDN網站以及昕力資訊網站 ,轉載請註明出處!

相關文章
相關標籤/搜索