`
77rou
  • 浏览: 50663 次
社区版块
存档分类
最新评论

Xamarin 技术全解析

 
阅读更多

Xamarin 是一套基于C#语言的跨平台移动应用开发工具,今年2月份微软宣布收购Xamarin,而后在4月份进行的Build大会上微软宣布将会在各个版本的Visual Studio中免费提供Xamarin,并且宣布Xamarin SDK开源。

本文主要阐述Xamarin是什么,它能做什么以及它是如何跨平台的。 

1. 什么是Xamarin

Xamarin 是一个跨平台的移动开发工具,由 Mono 发展而来。开发人员可以使用 C# 为iOS,Android, Mac以及Windows Phone开发原生应用。

 

Xamarin 的跨平台开发思路是:使用 C# 来完成所有平台共用的,和平台无关的 app 逻辑部分;由于各个平台的 UI 和交互不同,再使用由 Xamarin 封装好的 C# API 来访问和操控 native 的控件,分别进行不同平台的 UI 开发。

 

如下图:

 

另外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

 

- 点击下一步,输入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官网

 

分享到:
评论

相关推荐

    Xamarin.Android TBS

    Xamarin技术介绍** Xamarin是由Microsoft开发的一种跨平台移动应用开发框架,它基于.NET框架,允许开发者使用C#语言编写代码,一次编写,多平台运行,支持iOS、Android以及Windows等平台。Xamarin通过原生API绑定,...

    xamarin App自动升级

    在 Xamarin 中实现这一流程,我们可以利用以下技术: - **Http 客户端**:使用 `HttpClient` 或 `WebClient` 类从服务器获取版本信息。C# 的异步编程模型(async/await)可以帮助我们优雅地处理网络请求,避免阻塞 ...

    Xamarin Forms中文文档

    - **XAML 编译**:Xamarin.Forms 支持编译时 XAML 解析,提高运行效率。 - **实时重载**:在开发过程中自动更新 UI,无需重新编译整个应用。 - **XAML 预览程序**:在不运行应用的情况下查看 UI 的外观。 - **XAML ...

    Xamarin Android Full App

    **Xamarin Android 全局应用详解** ...总之,"Xamarin Android Full App"项目是一个很好的起点,通过实践这个项目,开发者可以全面掌握Xamarin Android的基本概念和技术,为更复杂的移动应用开发打下坚实基础。

    Xamarin iOS开发实战上册(内部资料)

    通过这份内部资料的学习,开发者可以系统地掌握使用Xamarin进行iOS应用开发的全过程,从初学者快速成长为熟练的跨平台开发者。同时,提供的【大学霸淘宝店.url】可能是一个资源链接,方便读者购买更多相关学习资源或...

    Xamarin Blueprints pdf 0分

    Xamarin Blueprints不仅是一本详尽的技术指南,也是一份宝贵的资源,它不仅适合初学者入门,也适用于想要深入了解Xamarin技术栈的专业开发者。通过学习本书,读者可以全面掌握Xamarin开发的各种技巧,并具备构建高...

    《Xamarin Mobile Application Development for Android》配套源码

    在本书的配套源码中,"9169_All_Codes" 这个压缩包文件包含了书中各个章节实例的完整代码,旨在帮助读者深入理解并实践 Xamarin Android 开发中的各种技术和概念。 **Xamarin Android 开发基础** 1. **C# 语言**: ...

    Xamarin.WeexApp:xamarin C#与Weex把weex带到了xamarin平台

    **Xamarin技术详解:** Xamarin是一个.NET框架,允许开发者使用C#、XAML和.NET工具创建原生的iOS、Android和Windows应用。Xamarin的独特之处在于它的“共享代码”模型,开发者可以在一个项目中编写大部分业务逻辑,...

    Xamarin XAML语言教程

    ### Xamarin XAML语言教程知识点详解 #### 一、Xamarin及XAML概述 - **Xamarin**: 是一款跨平台移动...通过以上知识点的学习,可以深入了解Xamarin XAML语言的核心概念和技术细节,为实际项目开发打下坚实的基础。

    Xamarin_Forms___SkiaSharp_and_Xamarin_Forms.zip

    在这个项目中,"Xamarin_Forms___SkiaSharp_and_Xamarin_Forms.zip",我们看到的是Xamarin.Forms结合SkiaSharp的示例代码,这是一门高级技术,用于创建高度自定义的图形界面和渲染复杂视觉效果。 **SkiaSharp简介**...

    dotnet-CodeHub是一个使用Xamarin编写的iOS应用程序

    《Xamarin技术在iOS应用程序开发中的应用——以dotnet-CodeHub为例》 在现代移动应用开发领域,跨平台开发工具的重要性不言而喻。Xamarin作为.NET开发框架的一部分,以其强大的跨平台能力赢得了广大开发者青睐。...

    Mr._Gestures_for_Xamarin_2.1.0_Downloadly.ir.rar

    然而,在这个上下文中,由于我们讨论的是 Xamarin,Delphi 可能是指开发者使用 Delphi 技术或经验来与 Xamarin 结合,或者可能是该手势库的一个开发者或用户具有 Delphi 背景。 【文件名称解析】 "Mr. Gestures for...

    Xamarin-NFC-样本

    【Xamarin-NFC-样本】是一个使用C#语言开发的示例项目,它展示了如何在Xamarin平台上利用近场通信(NFC)技术。Xamarin是Microsoft推出的一个跨平台移动应用开发框架,允许开发者使用C#编写代码,构建运行于iOS、...

    Mr._Gestures_for_Xamarin_v2.0.0_Downloadly.ir.rar

    因此,我们需将 "Delphi" 标签视为可能的误导信息,重点关注 Xamarin 相关的技术点。 【压缩包子文件的文件名称列表】 只给出了一个文件名:"Mr. Gestures for Xamarin v2.0.0",这可能是安装程序、库文件、文档或...

    mastering-xamarin.forms-book:掌握Xamarin.Forms-第三版

    《掌握Xamarin.Forms - 第三版》是一本深入解析Xamarin.Forms技术的专业书籍,专为想要精通移动应用开发的C#开发者设计。Xamarin.Forms是.NET框架中的一个关键组件,它允许开发人员使用单一代码库构建跨平台的原生...

    xamarin-ibeacon-demo:使用Xamarin表单的iBeacon演示

    【Xamarin-iBeacon-Demo】是一个使用Xamarin.Forms开发的跨平台应用示例,它展示了如何在iOS设备上利用iBeacon技术。这个项目旨在帮助开发者了解如何在C#编程环境中集成iBeacon功能,使得iOS应用可以检测并响应...

    Xamarin.Android实现手写板的功能

    同时,为了实现回放功能,我们可以解析保存的路径数据,并在重新加载时按照顺序重新绘制。 7. **橡皮擦功能**: 添加橡皮擦功能可以让用户擦除已绘制的部分。这可以通过创建一个透明度较高的颜色作为擦除颜色,...

    dotnet-xUber使用XamarinForms克隆一个Uber应用

    【标题】"dotnet-xUber使用XamarinForms克隆一个Uber应用"是一个项目,它旨在通过.NET框架下的Xamarin.Forms技术来实现一个类似Uber的应用程序。这个项目对于想要学习跨平台移动开发,特别是使用C#和Xamarin.Forms的...

    RedBit.Samples.DeviceID:在 iOS、Android 和 Windows 上获取唯一设备 ID 的 Xamarin Forms 应用程序示例

    Xamarin Forms 是一种流行的技术,用于构建能够在多种移动操作系统上运行的原生应用。通过这个项目,开发者可以学习如何在 iOS、Android 和 Windows 上一致地实现设备 ID 的检索,这在多设备应用开发中是非常实用的...

Global site tag (gtag.js) - Google Analytics