郑重声明:

  本文非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三大底层技术吧:MonoBinding(绑定)以及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介绍的更多相关文章

  1. Xamarin Mono 环境搭建(使用Visual Studio 2013 开发android 和 ios )

    本文主要介绍Xamarin结合VS2013来开发Android应用程序,主要会介绍Mono和Xamarin的关系,以及整个搭建环境的过程. 一.Mono和Xamarin介绍 1.Mono简介 Mono ...

  2. Xamarin.Forms入门学习路线

    Xamarin 介绍 Xamarin是一套跨平台解决方案,目的是使用C#语言创造原生的iOS,Android,Mac和Windows应用. Xamarin的三个优势: Xamarin App拥有原生A ...

  3. Xamarin Mono 环境搭建

    Xamarin Mono 环境搭建(使用Visual Studio 2013 开发android 和 ios ) 本文主要介绍Xamarin结合VS2013来开发Android应用程序,主要会介绍Mo ...

  4. 快速开发跨平台应用之Xamarin技术

    Xamarin 介绍 Xamarin 是一个允许开发人员有效创建可跨 iOS.Android.Windows 应用程序的开发工具集.Xamarin是免费且开源的,遵循 MIT (麻省理工学院许可证)协 ...

  5. Xamarin + MvvmCross 安装 Part 1

    前言 最近,由于工作需要,公司准备开发移动端APP.临近年底,公司不准备大面招人,由于公司一直基于.net平台进行开发,本人自告奋勇,准备先用xamarin做下移动开发.开始了在网上不停的google ...

  6. C# Xamarin移动开发基础进修篇

    一.课程介绍 英文原文:C# is the best language for mobile app development. Anything you can do in Objective-C, ...

  7. Xamarin安装及调试

    Xamarin介绍 Xamarin是一个跨平台的开发框架(工具集),创始于2011年,旨在使移动开发变得难以置信地迅捷和简单,它是跨平台的,它允许开发人员有效创建可跨 iOS.Android.Wind ...

  8. Xamarin开发综述

    https://blog.csdn.net/qq_41647999/article/details/84844357 一. 前言这十来天对Xamarin的学习踩了很多的坑,说来也是一把心酸泪,下面为大 ...

  9. 卓越研发之路 MOT技术管理者课堂

    引言:从2018年11月起,在北京.大连.上海.南京.杭州.武汉.成都.西安.深圳.广州等地巡回举办的技术沙龙.活动旨在交流软件研发及互联网技术的实战经验,分享优秀的案例实践,通过平台结识更多友人,挖 ...

随机推荐

  1. 【css】主要的块状元素(block element)和内联元素(inline element行内元素)

      内联元素:只在行内发生作用,设置宽高不起作用,不会影响文字内容,使其换行等.竖直方向和间距也不起作用   display可以强制转换行内元素和块状元素,还可以取消显示none   块元素(bloc ...

  2. 如何免费使用jrebel 和eclipse 项目配合完成热部署功能

    天,感谢王同学分享了热部署插件,jrebel,说修改后台代码可以不用重启tomcat,于是立即下载使用....本来很简单的一个事情,因为参照了网上各种帖子,结果坑的不行....所以把自己的经验分享一下 ...

  3. Nlpir Parser智能语义平台全文搜索

    全文索引用于处理大文本集合,利用它人们可以在海量文本中快速获取需要的信息.全文检索系统是按照全文检索理论建立起来的用于提供全文检索服务的软件系统.一般来说,全文检索需要具备建立索引和提供查询的基本功能 ...

  4. VMware workstation虚拟集群实践(1)—— 配置集群多节点互信

    一. 简述 节点互信,是集群管理的基本操作之一.节点互信是通过SSH协议的公钥密钥认证来代替密码认证来实现的.对于单点批量管理多个节点,多个节点之间相互通信来说,配置SSH单方向信任,或者互信十分必要 ...

  5. IntelliJ IDEA(2017.2)安装和破解(转)

    如果有一定的经济基础,请支持正版,这里提供破解方法. 一.下载并安装, IntelliJ IDEA的官网:https://www.jetbrains.com 二.破解. 百度下载一个 Jetbrain ...

  6. 野生程序员对.NETFramework 4.0 ThreadPool的理解

    ThreadPool 类 提供一个线程池,该线程池可用于执行任务.发送工作项.处理异步 I/O.代表其他线程等待以及处理计时器. 命名空间:   System.Threading程序集:  mscor ...

  7. macOS Sierra Version 10.12.6 环境下Tomcat的下载与安装以及InterlliJ IDEA 2017.2 环境下配置Tomcat 与创建Web项目

    一.Tomcat的下载与安装 1.官网(http://tomcat.apache.org/)下载Tomcat 9.0 Core:zip包: 2.解压到指定的文件夹即可安装完成: 3.测试是否安装成功 ...

  8. python_求相邻数

    什么是相邻数? 比如5,相邻数为4和6,和5相差1的数,连续相差为1的一组数 需求: 遍历inputList 所有数字,取出所有数字,判断是否有相邻数, 不相邻数字 和 相邻数字 都以 “数组”形式 ...

  9. [Python] wxPython 编辑框组件学习总结 (原创)

    1.总结 1.常用4种 编辑框 的构造 1.普通编辑框 单行输入的简单编辑框 (?为所在框的对象,同下) self.textBox = wx.TextCtrl(parent = ?) 2.密码编辑框 ...

  10. tomcat替换.class文件并没有生效的原因(失效原因)(转)

    紧急关头难免会替换class文件,但一定要注意一下几点. 1.小心class内中的project 的类的后,替换文件需要加上 $classMapper这个类, 编译成class的时候,会把public ...