Xamarin 技术全解析
2016-05-25 10:17
429 查看
Xamarin 是一套基于C#语言的跨平台移动应用开发工具,今年2月份微软宣布收购Xamarin,而后在4月份进行的Build大会上微软宣布将会在各个版本的Visual Studio中免费提供Xamarin,并且宣布Xamarin SDK开源。本文主要阐述Xamarin是什么,它能做什么以及它是如何跨平台的。
![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100539022-657262322.png)
另外Xamarin还提供了Xamarin.Forms UI工具包,Xamarin.Forms可以帮助开发人员快速的构建跨平台的UI,通过一次编码,生成多个平台的原生UI界面,稍后本文会讲述Xamarin.Forms的使用方法以及实现原理。
![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100624538-1141297095.png)
- 点击下一步,输入App 名称, 例如:FirstXamariniOS,一路点击下一步,工程创建完成。下面是生成的iOS工程结构截图:
![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100646147-84279150.png)
如果有Xcode使用经验的话会发现,这个Xamarin iOS工程的项目结构与Xcode的结构很类似,都包含了AppDelegate类,默认的ViewController以及Main StoryBoard文件,基本的类名称都是一致的。 打开Main.storyboard 文件,可以从Toolbox上拖拽一些原生控件到View Controller上,与Xcode中使用方式一致,但是有一些功能没有Xcode 强大,比如设置View的Auto layout等等,如下图:
![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100708116-124306304.png)
运行上面的工程,就可以在模拟器中查看效果了。 从上面来看来说使用Xamarin进行iOS编程需要有一定的iOS App开发知识,需要熟悉iOS UI框架(Cocoa Touch)等等,即便使用Xamarin开发应用,也绕不过原生底层的这些东西。
![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100737584-238451600.png)
- 点击下一步,输入App 名称, 例如:FirstXamarinAndroid,一路点击下一步,工程创建完成。下面是生成的Android工程结构截图:
![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100753709-456853092.png)
如果有Eclipse进行Android编程经验的话会发现,这个Xamarin Android工程的项目结构与Eclipse的结构很类似,都包含了默认的MainActivity以及布局文件,基本的类名称都是一致的。 打开Main.axml文件,可以从Toolbox上拖拽一些原生控件到View Controller上,与Eclipse的体验类似,也可以通过编辑XML的方式更改界面。 同样从上面来看来说使用Xamarin进行Android编程需要有一定的Android App开发知识,需要熟悉Android UI框架等等,原生底层的东西还是需要熟悉的。
![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100819834-984627316.png)
使用Xamarin.Forms构建跨平台应用的一个缺陷就是只能使用Xamarin.Forms包中的控件,会有一些限制。如果先了解更多关于如何使用Xamarin.Forms构建跨平台应用,请参见文章:Xamarin.Forms入门-使用 Xamarin.Forms 来创建跨平台的用户界面。
![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100832788-1791600425.png)
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#可以调用。
![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100908069-1004410755.png)
本文出自 “葡萄城控件技术团队博客” 博客,请务必保留此出处http://powertoolsteam.blog.51cto.com/2369428/1782877
1. 什么是Xamarin
Xamarin 是一个跨平台的移动开发工具,由 Mono 发展而来。开发人员可以使用 C# 为iOS,Android, Mac以及Windows Phone开发原生应用。 Xamarin 的跨平台开发思路是:使用 C# 来完成所有平台共用的,和平台无关的 app 逻辑部分;由于各个平台的 UI 和交互不同,再使用由 Xamarin 封装好的 C# API 来访问和操控 native 的控件,分别进行不同平台的 UI 开发。 如下图:![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100539022-657262322.png)
另外Xamarin还提供了Xamarin.Forms UI工具包,Xamarin.Forms可以帮助开发人员快速的构建跨平台的UI,通过一次编码,生成多个平台的原生UI界面,稍后本文会讲述Xamarin.Forms的使用方法以及实现原理。
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![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100624538-1141297095.png)
- 点击下一步,输入App 名称, 例如:FirstXamariniOS,一路点击下一步,工程创建完成。下面是生成的iOS工程结构截图:
![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100646147-84279150.png)
如果有Xcode使用经验的话会发现,这个Xamarin iOS工程的项目结构与Xcode的结构很类似,都包含了AppDelegate类,默认的ViewController以及Main StoryBoard文件,基本的类名称都是一致的。 打开Main.storyboard 文件,可以从Toolbox上拖拽一些原生控件到View Controller上,与Xcode中使用方式一致,但是有一些功能没有Xcode 强大,比如设置View的Auto layout等等,如下图:
![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100708116-124306304.png)
运行上面的工程,就可以在模拟器中查看效果了。 从上面来看来说使用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![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100737584-238451600.png)
- 点击下一步,输入App 名称, 例如:FirstXamarinAndroid,一路点击下一步,工程创建完成。下面是生成的Android工程结构截图:
![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100753709-456853092.png)
如果有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控件,对应的原生呈现为:![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100819834-984627316.png)
使用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):![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100832788-1791600425.png)
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的执行档。编译封装完成的应用程序被直接编译为原生的二进制执行文件。![](http://images2015.cnblogs.com/blog/139239/201605/139239-20160525100908069-1004410755.png)
3.3 Xamarin.Forms实现原理
在Xamarin Studio中构建Xamarin.Forms跨平台的应用的时候,会生成Android以及iOS单独的项目工程,两者共享业务逻辑以及一些UI界面,在打包生成App的时候,是分开进行的,两者互不影响。每个平台的实现原理与上面讲的是一样的。本文出自 “葡萄城控件技术团队博客” 博客,请务必保留此出处http://powertoolsteam.blog.51cto.com/2369428/1782877
相关文章推荐
- Android xml实现animation的4种动画效果实例代码
- 高级IO中socketpair实现进程间通信以及重定向
- Python入门-数据结构类型
- JSONModel 的使用总结
- 用RSA加密实现Web登录密码加密传输
- python 爬虫登陆学校教务系统
- vim 使用体会(1) Normal模式 当你启动Vim后,Vim会处于Normal模式。在Vim的Normal模式下,所有的键就是功能键,下面附上Vim快捷键分布图。 (2) Insert模
- Hbase安装
- Actix.Analyzer.v5.5.338.385.Win32_64 2CD+Delcam PowerSHAPE 2016 SP9
- Linux设置时间同步
- Linux下安装部署Jboss
- linux硬件设备操作函数 open(/dev/ietctl, O_RDWR|...)
- 打开UART0 RX功能
- 进程间通信方式
- 数据库性能优化
- 数据库性能优化之冗余字段的作用
- Antenna magus 5.5.0 Pro+Compusoft.Winner.v9.0a2+EPLAN Harness proD Studio 2.5
- Python Machine Learning---scikit-learn
- 常用的js工具库
- MySql-体系结构以及各种文件类型