Xamarin开发及学习资源
入行文章指引
移动开发下Xamarin VS PhoneGap
跨平台开发
许多企业希望能够通过开发移动应用程序,来提升企业业务水平,开发原生App时往往又缺少专业的Objective C 或 Java 移动开发人员。不仅如此,每种流行的移动平台都具有自身的开发语言,开发工具及特征,这就意味着开发一款应用需要花费三倍的开发时间,且需要维护三个项目。因此开发原生应用的代价是非常大的。
幸运的是,有很多公司已经在研究如何使原生APP的开发变得简单,目前为止多平台的开发方法主要有两种:
【原生:基于本地操作系统运行,本地CPU的目标执行,速度很快。对应的webApp基于网络 浏览器..】
第一种方法就是以Web 应用为内核,填充到原生app中(PhoneGap提供的解决方案)。这种方法能够吸引那些想要转到移动开发的Web开发人员,使用这种方法开发的应用就是将网站包装的像移动应用。
第二种方法就是使用跨平台的开发工具,这种工具提供一种通用语言开发原生App(Xamarin 提供的解决方案)。
Xamarin(Xamarin.Forms)可以让开发人员用C#开发,再使用Xamarin.Forms转换生成 iOS,Android, Windows Phone应用,Xamarin 比较受.Net 开发人员的喜爱。
两种工具采用不同的解决方法,面向不同技术背景的开发人员,来实现跨平台应用开发。随着两大平台的流行,很多控件厂商也开发出支持这两种平台的工具,如为PhoneGap 提供的Wijmo 5,为 Xamarin.Forms提供的Xuni 等,从而使移动开发更加快速高效,当然尽管有很多工具支持这两种平台,但是无论是PhoeGap或是Xamarin没有绝对的好与坏,因此如何选择,主要取决于哪种工具能够更有利于企业。下面我们就详细对比PhoneGap 与Xamarin。
PhoneGap
开发人员使用PhoneGap 时,可使用 JavaScript,HTML5,CSS来开发。PhoneGap 提供了访问移动设备特征的通用API接口,如传感器,摄像头等。这些应用程序称为混合应用,既不是原生的(在WebView中渲染)也不是纯Web的应用(需要访问原生设备API,是安装包的形式)可使用其他插件扩展PhoneGap 功能。最重要的是PhoneGap 是免费开源的。
Xamarin
Xamarin 提供利用.Net(Mono) 的开源实现的一个平台,开发人员可使用C#开发一次,Xamarin.Form就可同时生成iOS,Android,及Windows Phone 应用程序。Xamarin开发即可以使用Visual Studio,也可以使用其自有的 Xamarin Studio。Xamarin提供了高效的性能,提升了代码的复用,可以充分利用C#语言和.Net 平台的优势。
Xamarin VS PhoneGap
Xamarin.Forms | PhoneGap |
使用C#或XAML语言编码 | 使用 JavaScript,HTML,CSS 编码 |
开发iOS ,Android,WindowsPhone 应用 | 支持iOS, Android,WindowsPhone,Blackberry,Symbian,Bada,WebOS |
需要Xamarin许可证 | 免费开源 |
生成原生应用 | 应用程序不完全是原生的 |
高效 | 性能一般 |
应用程序在每个平台上都具有好的用户界面 | 需要其他辅助工具才能在每个平台上实现好的用户界面 |
大量的共享资源 | 开源库,框架,相关平台优化的碎片 |
总结
每个开发人员需要选择一款适合他们开发的解决方案。PhoneGap能够提升web开发的技能,而Xamarin 致力于.NET 技术,是最直接的解决方法。尽管有很多工具支持这两种平台,但是 PhoeGap 与 Xamarin 之间没有绝对的好与坏之分。
工具选择
Xamarin 技术全解析
Xamarin 是一套基于C#语言的跨平台移动应用开发工具,2016年2月份微软宣布收购Xamarin,而后在4月份进行的Build大会上微软宣布将会在各个版本的Visual Studio中免费提供Xamarin,并且宣布Xamarin SDK开源。
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组成,主要功能也有着三部分组成:
使用Xamarin.iOS来构建iOS原生应用
使用Xamarin进行iOS编程需要有一定的iOS App开发知识,需要熟悉iOS UI框架(Cocoa Touch)等等,即便使用Xamarin开发应用,也绕不过原生底层的这些东西。
使用Xamarin.Android来构建Android原生应用
使用Xamarin进行Android编程需要有一定的Android App开发知识,需要熟悉Android UI框架等等,原生底层的东西还是需要熟悉的。
使用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.Forms实现原理
在Xamarin Studio中构建Xamarin.Forms跨平台的应用的时候,会生成Android以及iOS单独的项目工程,两者共享业务逻辑以及一些UI界面,在打包生成App的时候,是分开进行的,两者互不影响。每个平台的实现原理与上面讲的是一样的。
3.3 支持Xamarin的工具
在微软收购 Xamarin 之后,全球最大的控件公司葡萄城马上做出反应,在知名的 ComponentOne Studio 产品中加入了 Xamarin 平台。
Xamarin 平台为 Visual Studio 提供灵活的原生移动开发 ,给原生移动应用提供出色的图表、仪表盘和表格控件。
ComponentOne Studio Enterprise 是一款专注于企业应用的.NET全功能控件套包,支持 WinForms、WPF、UWP、Xamarin、ASP.NET MVC 等多个平台,帮助您在缩减成本的同时,提前交付丰富的桌面、Web和移动企业应用。控件支持的范围广泛,包含了表格和数据管理、图表和数据可视化、流行的UI界面等,为您的企业应用开发提供高性能的控件工具。
了解更多信息请访问 ComponentOne Studio官网
Xamarin.Forms入门-使用 Xamarin.Forms 来创建跨平台的用户界面
Xamarin 学习笔记 - 配置环境(Windows & iOS)
Xaramin学习资源
博客
1、官网
3、葡萄城技术团队
4、Jesse
5、shanyou
6、大学霸
书籍
Xamarin开发及学习资源的更多相关文章
- Xamarin学习资源收集
推荐入门视频 跨行動平台App開發概觀- 使用Xamarin+Visual Studio https://www.youtube.com/watch?v=ELuFTTn1gS4 中文产品介绍http: ...
- 【Xamarin开发 Android 系列 3】循序渐进的学习顺序
原文:[Xamarin开发 Android 系列 3]循序渐进的学习顺序 指定合理的学习步骤,将各个技术点进行强化.慢慢 的就从点到线 到面的飞跃,一切仅仅是时间问题,开始前,请记住,学习是最佳的投资 ...
- .net 网站开发学习资源
慕课网 前端基础学习 http://www.imooc.com/course/list?c=fe 了解需求 例子之一 http://wenku.it168.com/d_000517899.shtml ...
- 【转载】salesforce 零基础开发入门学习(一)Salesforce功能介绍,IDE配置以及资源下载
salesforce 零基础开发入门学习(一)Salesforce功能介绍,IDE配置以及资源下载 目前国内已经有很多公司做salesforce,但是国内相关的资料确是少之又少.上个月末跳槽去了新 ...
- [PHP] Ecstore 开发学习资源
一.ECOS框架图 二.学习资源链接 PHP之窗 http://www.phpwindow.com/ ECOS百科大全 http://www.ec-os.net/doc.html
- 【Xamarin开发 Android 系列 7】 Android 结构基础(下)
原文:[Xamarin开发 Android 系列 7] Android 结构基础(下) *******前期我们不打算进行太深入的东西,省的吓跑刚进门的,感觉门槛高,so,我们一开始就是跑马灯一样,向前 ...
- Xamarin 开发过的那些项目
您可能已经看到类似的统计数据:智能手机用户在手机媒体上花费了89%的时间使用应用程序.或者听说Gartner预测到2017年移动应用程序下载将产生价值770亿美元的收入.很难不考虑这些数字.今天,每个 ...
- 【优质】React的学习资源
React的学习资源 github 地址: https://github.com/LeuisKen/react-collection https://github.com/reactnativecn/ ...
- React Native指南汇集了各类react-native学习资源、开源App和组件
来自:https://github.com/ele828/react-native-guide React Native指南汇集了各类react-native学习资源.开源App和组件 React-N ...
随机推荐
- KepServerEX读写三菱PLC,车间现场测试记录,带你了解【数据采集的困境】的前世与今生
1.不了解KepServerEX 的鞋童,可以先了解一下OPC UA,OPC UA服务端.我们当前项目读写三菱PLC是自己写的类库,但我感觉调用不够方便灵活,工作之余用OPC UA方式尝试一下 2.数 ...
- 关于ElasticSearch的堆内存设置与优化
1.什么是堆内存?Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象.在 Java 中,堆被划分成两个不同的区域:- 新生代 ( Young ).- 老年代 ( Ol ...
- Maven 初学+http://mvnrepository.com/
了解 maven是一款服务于java平台的自动化构建工具(项目管理工具) 构建:全方位.多角度.深层次地建立 项目构建是一个项目从:源代码.编译.测试.打包.部署.运行的过程 用来解决团队开发遇到的问 ...
- C# 录音和变调
一直想研究下录音 正好有个项目有机会使用一下强大的 NAudio (https://github.com/naudio/NAudio)库 录音 NAudio 录音类库 public class NAu ...
- 部署基于maven的springboot项目到linux服务器上
目录 本地运行调试 导入数据库: 导入项目: 将项目打包: linux准备: 运行项目: 脚本运行 本地运行调试 导入数据库: 导入数据库的时候使用的是sqlYog导入navcat的脚本:由于两个应用 ...
- Python的virtualenv管理
原文链接 虚拟环境 Python 开发中所谓的虚拟环境,就是为 Python 版本及第三方库创建独立的开发环境,使不同项目之间互不干扰.借助于虚拟环境,我们可以在同一台电脑上构建出项目 A 在基于 P ...
- 关于AWK的10个经典案例
awk是Linux系统下一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件.数据排序.计算以及生成报表等等,应用非常广泛.基本的命令语法:awk option 'pattern {actio ...
- Qt Creator 的下载与安装
一.Qt和Qt Creator的区别 Qt是C++的一个库,或者说是开发框架,里面集成了一些库函数,提高开发效率. Qt Creator是一个IDE,就是一个平台,一个开发环境,类似的比如说VS,也可 ...
- jquery实现倒计时
<html> <head> <meta charset="utf-8"/> <title>jquery实现倒计时</title ...
- MySQL 统计上一周从周一到周日的用户
这个功能按理说很常见,奇怪的是很难搜索到一个合适的.稍微整理了下,具体的就不展开了,注意这个表中的时间为毫秒,这条语句拷贝复制就能用.照顾大部分的无脑码农. SELECT case when FROM ...