Xamarin原生跨平臺:原生界面、原生性能、原生API(與H5比較);linux
一、C#能夠訪問Andrid、IOS原生API,也能夠調用C#系統類型,如Syetem,System.IO;
二、原理:基於Mono(在linux架一層Mono,.NET程序就能夠運行在Liunx系統上。以前分爲Mono Andriod、Mono Touch兩個平臺,後來因爲移動端的流行和一些緣由,名字就改爲成了Xamarin)。
三、技術基礎:
Binding(綁定):當Andriod、IOS 版本升級後,後臺經過Binding將原生API轉變成C#能夠調用的API,即實現了100%訪問原生API,這是H5作不到的,使用cordova只能訪問部分API,達不到100%。
P/Invoke(平臺調用):爲何C#能夠調用平臺級別的代碼呢?例如桌面程序能夠經過P/Invoke調用Win32 程序,Mono也是經過使用P/Invoke技術用C#代碼去調用原生API。這是技術傳統,並非什麼新技術,只是從桌面移植到了手機端。性能
四、
原生編譯方式(與cordova不一樣):
Andriod:首先將JAVA代碼編譯成中間語言,在Andriod部署運行的時候,經過Andriod虛擬機將中間語言轉換成機器語言來執行,即Java是基於虛擬機機制的。Xamarin模仿了這一套機制,它本身單獨實現了這一套虛擬機,把C#代碼編譯成中間語言以後,在Andriod程序運行時,經過Xamarin本身的虛擬機來運行。最終結果仍是轉換成原生的Andriod代碼來執行。
IOS:因爲IOS不容許經過虛擬機機制來運行,因此程序編譯以前,經過AOT(Ahead Of Time)編譯機制,事先把C#代碼轉換成IOS機器代碼來執行,同時在APP Store上架審覈的時候,和原生IOS是同樣的,不會由於代碼緣由致使審覈不經過。spa