Xamarin介绍
郑重声明:
本文非Xamarin使用详解,也没什么有用的干货,只是给不知道Xamarin到底是什么的大家提供一点点微不足道的小介绍,看完以后啥收获都没有也不是没可能的(*/ω\*)。so......ε=ε=ε=ε=ε=┌(つ•̀ω•́)つ(飞速逃离现场中......)
正文:
前段时间去参加了一个微软的Xamarin培训,刚好最近准备要在公司给大家做分享,这里先把我准备的内容写出来分享一下好了。
开始之前,和大家分享一句来自Xamarin官网首页的一句话:

图片上的中文是我自己翻译的,意思可能不是特别到位,但是从英文原文来看还是能够感受到Xamarin自己对于它所提供的跨平台移动开发解决方案还是十分自信的。而且这句话也能给尚不了解Xamarin到底是什么的人一个很直观的介绍——我们(Xamarin)是一个可以帮助你开发功能强大的移动应用的工具,并且你在移动开发过程中所需要用到的东西我们可都给你准备好了~
下面就从Xamarin的基本情况开始给大家做一个简要介绍吧:
一、Xamarin简介
- 2011年5月16日成立,2016年2月24日被微软正式收购。
非常年轻的公司,成立不到五年的时间就被微软这个巨头给收购了。主要是Xamarin背后的商业价值确实很强大,并且它是用C#来进行跨平台移动开发的。微软亲儿子无误了~
- 是Mono项目的一个分支。
基于.NET的跨平台实现的一个开源项目,Xamarin也正是由Mono项目中非常积极活跃的一批工程师所创立的。(不过我猜测多半是因为Mono作为开源项目实在是不赚钱,以及虽然做的已经很大很红火了,但维护什么的还是只能靠开源社区的活跃分子们无偿维护,久而久之自然是比不上可以全身心投入效果来的好了。所以里面最活跃的一批工程师干脆把Mono里移动开发这一块专门拿出来做成了商业项目,果不其然,效果还是很显著的嘛。——P.S以上均为个人臆测,不代表Mono项目参与者的真实想法!如果Xamarin创始人们顺着网线摸过来了我是不会负责的!─=≡Σ(((つ•̀ω•́)つε=ε=ε=┌(;´゚ェ゚)┘)
- 使得C#程序员开发原生的Android、iOS应用成为可能。
Windows应用就更不用说了,毕竟微软的亲儿子。
- 一套代码逻辑,三种平台实现:Android、iOS、Windows。
这点看上去和上面的感觉上有点重复,其实还是有差距的。上面那个只是说明了C#程序员不用去专门学Java或者Objective-C也能写Android和iOS应用,但是这里其实是想说明如果你想同时开发一个三个平台都能用的App,使用Xamarin的话就不需要Android写一遍代码,iOS写一遍代码然后到了Windows那边再写一遍代码那么麻烦了。不过这么一解释感觉好像还是有点多余,跨平台开发本来就是为了解决重复写代码的问题嘛……
- 强大的Xamarin Platform:Xamarin Studio,Xamarin.Forms,Xamarin for Visual Studio,Xamarin Test Cloud......
这个就不用过多解释了,Xamarin首页那句霸气的"Everything you need to deliver great mobile apps."依据就是从这来的,从开发、测试到发布,Xamarin样样都有~
二、Xamarin UI开发简介
UI开发一直都是App开发中比较重要的一部分。既然Xamarin声称它能做到「原生开发」,那就简单介绍一下它在UI开发方面的两种途径吧:
1.Xamarin Native Approach
说实话这种UI开发模式对于没有接触过Android或者iOS开发的C#程序员来说实在有点不友好,因为从名字上来说就能感受到了:Native,N-a-t-i-v-e!说的这么理直气壮也是让人气不打一处来哦?(P.S. 虽然不是Naive,但还是有种被嘲讽了的感觉。)就是说你想实现“原生”UI开发是吗?那就老老实实写人家原生的UI代码吧!虽然很可气,不过相对PhoneGap,Sencha之类的基于HTML5,JavaScript以及CSS的跨平台开发方案来说,Xamarin好歹是提供了一种可以使用Android和iOS原生UI控件的可能。有Android或者iOS开发基础的人选择这种方式来开发UI自然更得心应手;没有基础但是有上进心并且很勤奋的孩纸们也可以趁这个机会去学点Android和iOS的UI开发知识,反正多学一点东西总归是有好处的嘛。
至于那些既没有移动开发基础,又不勤奋的懒癌患者们,(没错,我就是这群人当中的佼佼者!(๑‾ ꇴ ‾๑))只能说Xamarin大概是算到了我们这群人的存在,所以提供了下面的这种开发方式:
2.Xamarin.Forms Approach
这种方式对C#程序员就很友好啦,在写界面的时候大家只需要调用Xamarin.Forms里已经封装好的UI组件就可以了,编译阶段Xamarin会根据代码自动生成相应的原生UI组件的。当然啦,Xamarin.Forms还做不到100%提供Android和iOS中所有的UI控件的,不过对于绝大多数应用场景都是够用的了。如果实在没有大家也可以发挥自己的聪明才智稍加组合一下,毕竟很多hacks就是在这种贫穷的现实中创造出来的嘛。
下面是一张Xamarin Native Approach和Xamarin.Forms的代码共享程度对比:

从上图可以明显感受到,如果使用Xamarin Native的方式来开发的话,共享代码基本上就只剩后台逻辑代码了,剩余大约1/4的代码还是个平台相关的代码。(看这么有规律和数字这么整的数据也能猜到对于这种数据的来源不能太苛刻~仅供直观感受一下两者之间的代码量差距。)如果使用Xamarin.Forms开发的话,那几乎没有什么平台相关的代码了。
总而言之,从个性化角度来说,Xamarin Native的方式要好一些;从维护角度来说,Xamarin.Forms维护起来更为轻松些。
三、Xamarin API简介
其实这部分要认真介绍起来还是蛮费劲的,所以我就直接甩张图给你们感受一下好了(懒癌发作中……(*/ω\*)):

这里要说明的其实就是Xamarin可以调用到Andriod和iOS中的所有API。实现所谓的100%原生API。这一点相较于PhoneGap之类的跨平台移动开发方案来说确实要优秀很多,因为每次Android或者iOS发布新功能的时候,就不用苦等经过封装后才能调用的API了。并且开发出来的App使用体验上接近原生开发的应用效率。
举颗栗子(栗子来源于培训老师。),iOS和Android刚推出健康功能里的记录用户每日行走步数功能时,使用PhoneGap等跨平台开发技术所开发的应用是没法在第一时间就能调用到这个功能的API的,他们只能等PhoneGap根据Andriod和iOS所提供的原生API封装好可被自己用户调用的API后,用户们才能调用到该功能的接口实现相应功能。所以对于调用非原生API开发的应用来说,其在功能更新方面会存在一定的滞后性。Xamarin傲娇的表示他们可以做到Andriod或iOS发布新功能API的当天,Xamarin的开发者也能调用到这些API们!ヽ( ̄▽ ̄)و
能够调用原生API的另一好处是,对于一些特殊的功能,譬如iOS的3D Touch功能之类的,Xamarin也能保障其开发者可以访问到,而大多数基于H5+JS+CSS的跨平台开发技术对于这些特殊功能的支持可能就没有那么到位了。(个人理解,这里如果有说的不对的地方敬请指正!)
四、Xamarin底层技术简介
这一小节推荐大家去阅读《Xamarin技术全解析》一文,介绍的非常详细。作者一看就知道和我这种重度懒癌患者不一样,因为我接下来又要甩图了……
等等,甩图之前再说一下Xamarin三大底层技术吧:Mono,Binding(绑定)以及P/Invoke(平台调用)。
好,下面请大家欣赏一下Xamarin.Andriod实现原理图:

怎么样?这图是不是看着不是很好懂?(已经看懂的就略过我接下来的内容吧,怕看完后反而不懂了(*/ω\*)......)其实上面推荐的那篇文章里有很好的介绍,我就简单复述(复制)一下吧。
我们用C#代码写的Andriod应用在运行的时候其实是在Mono虚拟机中运行的,而Mono虚拟机又是寄宿在ART(也就是Andriod虚拟机Dalvik)中运行的,所以ART通过ACWs(Andriod Callable Wrappers)的方式可以执行到Mono中的C#代码。因为要打包Mono的环境,所以用C#开发出的Andriod应用apk文件会比原生开发出来的要大,效率嘛自然也是要低一些的。
C#代码要是想调用系统功能或者Java的实现类库,可以借助MCW(Managed Callable Wrapper)的方式来实现。MCW是JNI(Java Native Interface)的桥梁,可以使用托管代码调用Andriod代码。MCW通过将所有Andriod.*及相关的命名空间用jar绑定的方式暴露出来使得C#可以直接调用。
说(粘贴)完Xamarin.Android,下面再说(粘贴)下Xamarin.iOS吧:

相较于Xamarin.Andriod而言,Xamarin.iOS就很简单啦~用C#开发的iOS应用被编译成IL(Intermediate Language,中间语言)代码,就转交给Apple Compiler,由其直接编译成iOS的本机代码。本质上来说,用C#写的iOS应用和Objective-C写出来的没有什么差别,是不是很棒!( • ̀ω•́ )✧
为表庆祝,再甩张图庆祝一下:

最后的最后,放上一张来自微软的呐喊图来结束这篇没有什么营养的介绍:

Xamarin介绍的更多相关文章
- Xamarin Mono 环境搭建(使用Visual Studio 2013 开发android 和 ios )
本文主要介绍Xamarin结合VS2013来开发Android应用程序,主要会介绍Mono和Xamarin的关系,以及整个搭建环境的过程. 一.Mono和Xamarin介绍 1.Mono简介 Mono ...
- Xamarin.Forms入门学习路线
Xamarin 介绍 Xamarin是一套跨平台解决方案,目的是使用C#语言创造原生的iOS,Android,Mac和Windows应用. Xamarin的三个优势: Xamarin App拥有原生A ...
- Xamarin Mono 环境搭建
Xamarin Mono 环境搭建(使用Visual Studio 2013 开发android 和 ios ) 本文主要介绍Xamarin结合VS2013来开发Android应用程序,主要会介绍Mo ...
- 快速开发跨平台应用之Xamarin技术
Xamarin 介绍 Xamarin 是一个允许开发人员有效创建可跨 iOS.Android.Windows 应用程序的开发工具集.Xamarin是免费且开源的,遵循 MIT (麻省理工学院许可证)协 ...
- Xamarin + MvvmCross 安装 Part 1
前言 最近,由于工作需要,公司准备开发移动端APP.临近年底,公司不准备大面招人,由于公司一直基于.net平台进行开发,本人自告奋勇,准备先用xamarin做下移动开发.开始了在网上不停的google ...
- C# Xamarin移动开发基础进修篇
一.课程介绍 英文原文:C# is the best language for mobile app development. Anything you can do in Objective-C, ...
- Xamarin安装及调试
Xamarin介绍 Xamarin是一个跨平台的开发框架(工具集),创始于2011年,旨在使移动开发变得难以置信地迅捷和简单,它是跨平台的,它允许开发人员有效创建可跨 iOS.Android.Wind ...
- Xamarin开发综述
https://blog.csdn.net/qq_41647999/article/details/84844357 一. 前言这十来天对Xamarin的学习踩了很多的坑,说来也是一把心酸泪,下面为大 ...
- 卓越研发之路 MOT技术管理者课堂
引言:从2018年11月起,在北京.大连.上海.南京.杭州.武汉.成都.西安.深圳.广州等地巡回举办的技术沙龙.活动旨在交流软件研发及互联网技术的实战经验,分享优秀的案例实践,通过平台结识更多友人,挖 ...
随机推荐
- python函数(6):内置函数和匿名函数
我们学了这么多关于函数的知识基本都是自己定义自己使用,那么我们之前用的一些函数并不是我们自己定义的比如说print(),len(),type()等等,它们是哪来的呢? 一.内置函数 由python内部 ...
- 再起航,我的学习笔记之JavaScript设计模式04
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 上回 ...
- amd和cmd区别
作者:玉伯 链接:https://www.zhihu.com/question/20351507/answer/14859415 来源:知乎 著作权归作者所有,转载请联系作者获得授权. AMD 是 R ...
- Java Socket 编程
1. 背景 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和 ...
- Vue事件处理
前面的话 Vue事件监听的方式貌似违背了关注点分离(separation of concern)的传统理念.实际上,所有的Vue.js事件处理方法和表达式都严格绑定在当前视图的ViewModel上,它 ...
- 将app接口服务器改为dotnet core承载
昨天我的一个 app 的接口服务器挂掉了,国外的小鸡意外的翻车,连同程序和数据一起,猝不及防.我的服务端程序是 asp.net mvc ,小鸡是 256 M 的内存跑不了 windows 系统,装的 ...
- numastat的理解
numa的统计数据及理解如下, [root@localhost kernel]# numastat node0 node1numa_hit ...
- Presto0.157版本单节点部署教程
因为Presto版本的更新速度较快,所以最好按照对应版本的教程进行部署,博主之前看错了版本号,拿0.100版本的教程来部署0.157版本,结果导致部署失败. 官网:https://prestodb.i ...
- MySQL中的基本知识
本文是MySQL中的一些基本知识,包括各种基本操作.数据类型和表的约束等. ps:都是自己总结.手打出来的,虽然不是什么新东西,但也勉强算原创吧.. 一.数据库 1.创建:CREATE DATABAS ...
- SVN 、Git、Github的使用
1.1 SVN 总结以及使用建议 每一次保存历史记录实际上就是一次提交 什么时候去保存历史记录? 完成了一个具体的功能模块 代码运行没有bug 当天工作结束提交一次 没有 bug 的前提下去提交一次 ...