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