Xamarin 技術全解析

Xamarin 是一套基於C#語言的跨平臺移動應用開發工具,今年2月份微軟宣佈收購Xamarin,然後在4月份進行的Build大會上微軟宣佈將會在各個版本的Visual Studio中免費提供Xamarin,而且宣佈Xamarin SDK開源。html

本文主要闡述Xamarin是什麼,它能作什麼以及它是如何跨平臺的。 java

 

1. 什麼是Xamarin

Xamarin 是一個跨平臺的移動開發工具,由 Mono 發展而來。開發人員可使用 C# 爲iOSAndroid, Mac以及Windows Phone開發原生應用。 編程

Xamarin 的跨平臺開發思路是:使用 C# 來完成全部平臺共用的,和平臺無關的 app 邏輯部分;因爲各個平臺的 UI 和交互不一樣,再使用由 Xamarin 封裝好的 C# API 來訪問和操控 native 的控件,分別進行不一樣平臺的 UI 開發。安全

 

以下圖:架構

 

另外Xamarin還提供了Xamarin.Forms UI工具包,Xamarin.Forms能夠幫助開發人員快速的構建跨平臺的UI,經過一次編碼,生成多個平臺的原生UI界面,稍後本文會講述Xamarin.Forms的使用方法以及實現原理。app

 

2. Xamarin能作什麼

Xamarin主要由Xamarin.iOS,Xamarin.Android以及Xamarin.Forms組成,主要功能也有着三部分組成:框架

 

2.1 使用Xamarin.iOS來構建iOS原生應用

下面會使用Mac OS X上的Xamarin Studio來演示如何構建iOS應用:工具

- 打開Xamarin Studio佈局

- 新建一個項目,選擇iOS - App - Single View App性能

 

- 點擊下一步,輸入App 名稱, 例如:FirstXamariniOS,一路點擊下一步,工程建立完成。

下面是生成的iOS工程結構截圖:

 

若是有Xcode使用經驗的話會發現,這個Xamarin iOS工程的項目結構與Xcode的結構很相似,都包含了AppDelegate類,默認的ViewController以及Main StoryBoard文件,基本的類名稱都是一致的。

 

打開Main.storyboard 文件,能夠從Toolbox上拖拽一些原生控件到View Controller上,與Xcode中使用方式一致,可是有一些功能沒有Xcode 強大,好比設置View的Auto layout等等,以下圖:

 

運行上面的工程,就能夠在模擬器中查看效果了。

 

從上面來看來講使用Xamarin進行iOS編程須要有必定的iOS App開發知識,須要熟悉iOS UI框架(Cocoa Touch)等等,即使使用Xamarin開發應用,也繞不過原生底層的這些東西。 

 

2.2 使用Xamarin.Android來構建Android原生應用

下面會使用Mac OS X上的Xamarin Studio來演示如何構建iOS應用:

- 打開Xamarin Studio

- 新建一個項目,選擇Android - App - Android App

 

- 點擊下一步,輸入App 名稱, 例如:FirstXamarinAndroid,一路點擊下一步,工程建立完成。

下面是生成的Android工程結構截圖:

 

若是有Eclipse進行Android編程經驗的話會發現,這個Xamarin Android工程的項目結構與Eclipse的結構很相似,都包含了默認的MainActivity以及佈局文件,基本的類名稱都是一致的。 

打開Main.axml文件,能夠從Toolbox上拖拽一些原生控件到View Controller上,與Eclipse的體驗相似,也能夠經過編輯XML的方式更改界面。 

一樣從上面來看來講使用Xamarin進行Android編程須要有必定的Android App開發知識,須要熟悉Android UI框架等等,原生底層的東西仍是須要熟悉的。 

 

2.3 使用Xamarin.Forms來構建跨平臺的應用

Xamarin.Forms 是一個建立跨平臺用戶界面的庫,經過Xamarin.Forms 能夠一次編碼生成基於各個移動平臺(iOS, Android, Windows Phone)的應用界面。

 

Xamarin.Forms提供了更高層次的一層UI組件抽象,這些組件在進行最終呈現的時候,會以原生控件的方式表現出來,也就是說每個Xmarin.Forms的控件最終會有多個平臺的原生呈現邏輯,以下圖中,Xamarin.Forms的Entry控件,對應的原生呈現爲:

 

使用Xamarin.Forms構建跨平臺應用的一個缺陷就是隻能使用Xamarin.Forms包中的控件,會有一些限制。

若是先了解更多關於如何使用Xamarin.Forms構建跨平臺應用,請參見文章:Xamarin.Forms入門-使用 Xamarin.Forms 來建立跨平臺的用戶界面

 

3. Xamarin實現原理

3.1 Xamarin.Android 實現原理

在講述Xamarin.Android架構以前,須要先了解一些Android應用程序的背景知識:

- Android應用程序試運行在Dalvik虛擬機中的,每個應用程序對應一個單獨的虛擬機實例,其代碼在虛擬機的解釋下得以執行。

- Dalvik主要是完成對象生命週期管理,堆棧管理,線程管理,安全和異常管理,以及垃圾回收等等重要功能。

- 不一樣於Java虛擬機運行java字節碼,Dalvik虛擬機運行的是其專有的文件格式

 

Xamarin.Android架構圖(ART 是Android 虛擬機Dalvik):

 

Android Callable Wrappers(ACW)

使用C#開發的Android應用程序在運行的時候,C#代碼是在Mono虛擬機中執行的,而Mono虛擬機是寄宿在Dalvik虛擬機中運行的,全部的C#代碼都經過ACW的方式被調用。

 

因爲須要打包Mono環境,使用C#開發的Android應用的APK文件會比原生開發的大,執行效率也會差一些。

 

Managed Callable Wrapper(MCW)

若是須要在C#中調用一些系統的功能或者Java實現的類庫,該如何調用那? 答案就是MCW,MCW就是一個JNI橋樑,可使用託管代碼調用Android的代碼。MCW將整個Android.* 以及相關的命名空間經過 jar綁定的方式暴露出來,是的C#能夠調用。

 

3.2 Xamarin.iOS 實現原理

對於開發者來講,Xamarin.IOS相對於Xamarin.Android就要簡單不少了,咱們用C#開發的iOS應用程序在被編譯成IL代碼以後,而後轉交給Apple complier直接編譯成iOS的本地機器碼,也就是說C#寫的iOS應用程序和Objective-C 寫的是同樣的。 

透過 Ahead-of-Time (AOT) 編譯程序,直接將Xamarin.iOS程序編譯爲ARM的執行檔。編譯封裝完成的應用程序被直接編譯爲原生的二進制執行文件。

 

​3.3 Xamarin.Forms實現原理

在Xamarin Studio中構建Xamarin.Forms跨平臺的應用的時候,會生成Android以及iOS單獨的項目工程,二者共享業務邏輯以及一些UI界面,在打包生成App的時候,是分開進行的,二者互不影響。每一個平臺的實現原理與上面講的是同樣的。

3.4 支持Xamarin的工具

在微軟收購 Xamarin 以後,全球最大的控件公司葡萄城立刻作出反應,在知名的 ComponentOne Studio 產品中加入了 Xamarin 平臺。

Xamarin 平臺爲 Visual Studio 提供靈活的原生移動開發 ,給原生移動應用提供出色的圖表、儀表盤和表格控件。

ComponentOne Studio Enterprise 是一款專一於企業應用的.NET全功能控件套包,支持 WinForms、WPF、UWP、Xamarin、ASP.NET MVC 等多個平臺,幫助您在縮減成本的同時,提早交付豐富的桌面、Web和移動企業應用。控件支持的範圍普遍,包含了表格和數據管理、圖表和數據可視化、流行的UI界面等,爲您的企業應用開發提供高性能的控件工具。

瞭解更多信息請訪問 ComponentOne Studio官網

相關文章
相關標籤/搜索