郑重声明:

  本文非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. Dubbo应用文档

    Dubbo应用文档 Dubbo简介 概述 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案 Dubbo是阿里巴巴SOA服务化治理方案的核心框架, ...

  2. Uva 122 树的层次遍历 Trees on the level lrj白书 p149

    是否可以把树上结点的编号,然后把二叉树存储在数组中呢?很遗憾如果结点在一条链上,那将是2^256个结点 所以需要采用动态结构 首先要读取结点,建立二叉树addnode()+read_input()承担 ...

  3. js中this的指向总结

    // this要在执行时才能确认值,定义时无法确认.下面是常见的几种this指向. //1.在构造函数执行 function Obj(name,age){ //1.实例化时:会创建一个 空对象     ...

  4. PHP部分问题的总结

    一.php连接sql sever 2005 中文编码转换问题. 这个问题是近期做Yii项目遇到的,而且php项目中用sql server做数据库,就是一个很坑的事,但没办法啊,客户是大爷,得听他的.( ...

  5. springMVC修改用户请求内容

    最近在做一个微信相关的网站,很多地方涉及到微信表情的输入,导致内容无法插入到数据库,虽然有用到一个表情过滤的工具类,但是需要过滤的地方比较多,于是想到在过滤器中过滤用户请求的内容. request这个 ...

  6. 分享一款好用的PHP下ID混淆插件

    前几天接到个任务,甲方先前自己找外包开发的一个产品购买小站不准备继续给外包维护了,转手抛给我们,顺便提了一堆修改意见. 其中一个意见是因为外包开发的订单网站直接用数据库自增的id作为订单号,导致订单号 ...

  7. 【NO.12-1】Jmeter - 在Linux执行性能测试的方法 [1]

    前面讲过在Windows执行性能测试的方法,就是这篇了<jmeter - 一个完整的接口测试的脚本>, 在Windows执行性能测试之前,首先要有1个性能测试脚本嘛, 但是这个性能测试脚本 ...

  8. Linux - 简明Shell编程07 - 数组(Array)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash test0=() # 定义数组 ...

  9. HDU 6006 Engineer Assignment:状压dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6006 题意: 在Google中,有个n项目,m个专家.第i个项目涉及c[i]个领域,分别为a[i][0 ...

  10. Ubuntu Docker 安装和配置 GitLab CI 持续集成

    相关文章: Ubuntu Docker 简单安装 GitLab 劈荆斩棘:Gitlab 部署 CI 持续集成 目的:在 Ubuntu 服务器上,使用 Docker 安装和配置 GitLab Runne ...