新聞中心
Xamarin 是一套基于C#語言的跨平臺移動應用開發(fā)工具,今年2月份微軟宣布收購Xamarin,而后在4月份進行的Build大會上微軟宣布將會在各個版本的Visual Studio中免費提供Xamarin,并且宣布Xamarin SDK開源。
本文主要闡述Xamarin是什么,它能做什么以及它是如何跨平臺的。
1. 什么是Xamarin
Xamarin 是一個跨平臺的移動開發(fā)工具,由 Mono 發(fā)展而來。開發(fā)人員可以使用 C# 為iOS,Android, Mac以及Windows Phone開發(fā)原生應用。
Xamarin 的跨平臺開發(fā)思路是:使用 C# 來完成所有平臺共用的,和平臺無關(guān)的 app 邏輯部分;由于各個平臺的 UI 和交互不同,再使用由 Xamarin 封裝好的 C# API 來訪問和操控 native 的控件,分別進行不同平臺的 UI 開發(fā)。
如下圖:
另外Xamarin還提供了Xamarin.Forms UI工具包,Xamarin.Forms可以幫助開發(fā)人員快速的構(gòu)建跨平臺的UI,通過一次編碼,生成多個平臺的原生UI界面,稍后本文會講述Xamarin.Forms的使用方法以及實現(xiàn)原理。
2. Xamarin能做什么
Xamarin主要由Xamarin.iOS,Xamarin.Android以及Xamarin.Forms組成,主要功能也有著三部分組成:
2.1 使用Xamarin.iOS來構(gòu)建iOS原生應用
下面會使用Mac OS X上的Xamarin Studio來演示如何構(gòu)建iOS應用:
- 打開Xamarin Studio
- 新建一個項目,選擇iOS - App - Single View App
- 點擊下一步,輸入App 名稱, 例如:FirstXamariniOS,一路點擊下一步,工程創(chuàng)建完成。
下面是生成的iOS工程結(jié)構(gòu)截圖:
如果有Xcode使用經(jīng)驗的話會發(fā)現(xiàn),這個Xamarin iOS工程的項目結(jié)構(gòu)與Xcode的結(jié)構(gòu)很類似,都包含了AppDelegate類,默認的ViewController以及Main StoryBoard文件,基本的類名稱都是一致的。
打開Main.storyboard 文件,可以從Toolbox上拖拽一些原生控件到View Controller上,與Xcode中使用方式一致,但是有一些功能沒有Xcode 強大,比如設置View的Auto layout等等,如下圖:
運行上面的工程,就可以在模擬器中查看效果了。
從上面來看來說使用Xamarin進行iOS編程需要有一定的iOS App開發(fā)知識,需要熟悉iOS UI框架(Cocoa Touch)等等,即便使用Xamarin開發(fā)應用,也繞不過原生底層的這些東西。
2.2 使用Xamarin.Android來構(gòu)建Android原生應用
下面會使用Mac OS X上的Xamarin Studio來演示如何構(gòu)建iOS應用:
- 打開Xamarin Studio
- 新建一個項目,選擇Android - App - Android App
- 點擊下一步,輸入App 名稱, 例如:FirstXamarinAndroid,一路點擊下一步,工程創(chuàng)建完成。
下面是生成的Android工程結(jié)構(gòu)截圖:
如果有Eclipse進行Android編程經(jīng)驗的話會發(fā)現(xiàn),這個Xamarin Android工程的項目結(jié)構(gòu)與Eclipse的結(jié)構(gòu)很類似,都包含了默認的MainActivity以及布局文件,基本的類名稱都是一致的。
打開Main.axml文件,可以從Toolbox上拖拽一些原生控件到View Controller上,與Eclipse的體驗類似,也可以通過編輯XML的方式更改界面。
同樣從上面來看來說使用Xamarin進行Android編程需要有一定的Android App開發(fā)知識,需要熟悉Android UI框架等等,原生底層的東西還是需要熟悉的。
2.3 使用Xamarin.Forms來構(gòu)建跨平臺的應用
Xamarin.Forms 是一個創(chuàng)建跨平臺用戶界面的庫,通過Xamarin.Forms 可以一次編碼生成基于各個移動平臺(iOS, Android, Windows Phone)的應用界面。
Xamarin.Forms提供了更高層次的一層UI組件抽象,這些組件在進行最終呈現(xiàn)的時候,會以原生控件的方式表現(xiàn)出來,也就是說每一個Xmarin.Forms的控件最終會有多個平臺的原生呈現(xiàn)邏輯,如下圖中,Xamarin.Forms的Entry控件,對應的原生呈現(xiàn)為:
使用Xamarin.Forms構(gòu)建跨平臺應用的一個缺陷就是只能使用Xamarin.Forms包中的控件,會有一些限制。
如果先了解更多關(guān)于如何使用Xamarin.Forms構(gòu)建跨平臺應用,請參見文章:Xamarin.Forms入門-使用 Xamarin.Forms 來創(chuàng)建跨平臺的用戶界面。
3. Xamarin實現(xiàn)原理
3.1 Xamarin.Android 實現(xiàn)原理
在講述Xamarin.Android架構(gòu)之前,需要先了解一些Android應用程序的背景知識:
- Android應用程序試運行在Dalvik虛擬機中的,每一個應用程序?qū)粋€單獨的虛擬機實例,其代碼在虛擬機的解釋下得以執(zhí)行。
- Dalvik主要是完成對象生命周期管理,堆棧管理,線程管理,安全和異常管理,以及垃圾回收等等重要功能。
- 不同于Java虛擬機運行java字節(jié)碼,Dalvik虛擬機運行的是其專有的文件格式
Xamarin.Android架構(gòu)圖(ART 是Android 虛擬機Dalvik):
Android Callable Wrappers(ACW)
使用C#開發(fā)的Android應用程序在運行的時候,C#代碼是在Mono虛擬機中執(zhí)行的,而Mono虛擬機是寄宿在Dalvik虛擬機中運行的,所有的C#代碼都通過ACW的方式被調(diào)用。
由于需要打包Mono環(huán)境,使用C#開發(fā)的Android應用的APK文件會比原生開發(fā)的大,執(zhí)行效率也會差一些。
Managed Callable Wrapper(MCW)
如果需要在C#中調(diào)用一些系統(tǒng)的功能或者Java實現(xiàn)的類庫,該如何調(diào)用那? 答案就是MCW,MCW就是一個JNI橋梁,可以使用托管代碼調(diào)用Android的代碼。MCW將整個Android.* 以及相關(guān)的命名空間通過 jar綁定的方式暴露出來,是的C#可以調(diào)用。
3.2 Xamarin.iOS 實現(xiàn)原理
對于開發(fā)者來說,Xamarin.IOS相對于Xamarin.Android就要簡單很多了,我們用C#開發(fā)的iOS應用程序在被編譯成IL代碼之后,然后轉(zhuǎn)交給Apple complier直接編譯成iOS的本地機器碼,也就是說C#寫的iOS應用程序和Objective-C 寫的是一樣的。
透過 Ahead-of-Time (AOT) 編譯程序,直接將Xamarin.iOS程序編譯為ARM的執(zhí)行檔。編譯封裝完成的應用程序被直接編譯為原生的二進制執(zhí)行文件。
3.3 Xamarin.Forms實現(xiàn)原理
在Xamarin Studio中構(gòu)建Xamarin.Forms跨平臺的應用的時候,會生成Android以及iOS單獨的項目工程,兩者共享業(yè)務邏輯以及一些UI界面,在打包生成App的時候,是分開進行的,兩者互不影響。每個平臺的實現(xiàn)原理與上面講的是一樣的。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
名稱欄目:Xamarin技術(shù)全解析-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://www.ef60e0e.cn/article/jhocg.html