郑重声明:

  本文非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. Datatables快速入门开发--一款好用的JQuery表格插件

    博主是一个java后端程序员小白,前端技术会用但不精通,做后台的一些功能经常要涉及表格的展示,分页,搜索,排序等等一系列功能,在经历了一段时间的原始手段,开始接触并使用Datatables,一个jqu ...

  2. 表达式求值(栈方法/C++语言描述)(二)

    上篇中完成了对表达式求值的整体过程,接下来看看如何处理不同类型的token. 对运算数的处理比较简单,它直接调用函数strtod(),将字符串中的运算数转换为浮点类型并将它压入运算数栈中: void ...

  3. Git时光机穿梭之工作区和暂存区

    Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工 ...

  4. TASKCTL产品功能清单-转载

    功能分类 功能描述 一级 二级 关系 调度控制 作业依赖关系调度 作业依赖关系调度是调度最基本的功能,指作业间具有顺序的运行,比如:a.b.c三个作业,只有当a完成后才运行b,b完成才能运行c 作业并 ...

  5. js数组遍历和对象遍历

    针对js各种遍历作一个总结分析,从类型用处:分数组遍历和对象遍历:还有性能,优缺点等. JS数组遍历: 1,普通for循环,经常用的数组遍历 var arr = [1,2,0,3,9]; for ( ...

  6. Git分支使用心得

    在去年的大约这个时候,我的领导让我研究一下git的使用方法,方便我们自己的代码管理,因为我们原先使用的是SVN,使用起来没那么方便,所以让我研究研究git的使用.我就简单的研究了两天,用我的IDE(v ...

  7. C语言库函数探究

    1.strlen()求字符串长度 //模拟实现strlen函数 #include<stdio.h> #include<stdlib.h> #include<string. ...

  8. tps 与 事务平均响应时间关系对答

    在网上看到一篇文章,tps 与 事务平均响应时间关系对答.可以帮助能更清楚的了解二者之间的关系. 问者:每秒处理的事务数和事务的平均响应时间 怎么个关系,有关系吗 kaku21:举个例子:一个高速路 ...

  9. [STM32F429-DISCO-HAL]4.Uart 的使用

    今天来学习一下最常用的外设之一USART. 首先是硬件的连接,我们需要至少三根线,GND,TX,RX.参阅datasheet.默认的USART1_TX和USART1_RX的引脚如下图 关于HAL dr ...

  10. Git版本控制之多人协作

         上篇文章我们主要简单的介绍了有关git的一些基本常识和一些简单的命令.但那终究是皮毛,我们使用git最主要的目的还是管理我们的项目,多人协作.本篇文章主要涉及以下两个大模块: 分支的概念及原 ...