[Xamarin]我的Xamarin填坑之旅(一)
一想到明天是星期五,不对,是今天,心里就很激动,毕竟明天没课。激动之余,来写一篇博客,记录一下最近踏坑Xamarin开发校园助手APP的一些事儿。也许更像是一篇流水账。
在扯Xamarin之前,有必要先交代一下背景。
自从我上大学以来,一直在做校园助手,直到现在。完成一个优秀的校园助手,是我大学中为数不多的几个梦想之一。想要制作一款软件,就必须要选择一种合适的语言或平台,喜爱微软的我,选择了C# via .Net。在匆匆了解了C#的基础后,便开始尝试使用WPF做一些简单的东西。然后这个时候的境界就停留在拖控件,不过好在也用拖控件的方式完成了一款Win32平台上的校园WIFI助手,结构简单,功能简单。当然此间接触了一些HTTP协议的基础知识。后来入手微软的Windows Phone手机,于是生出了在WP上开发校园WIFI助手的想法,有想法就有行动,不久后,成功完成了一个简易助手,叫《工大WIFI助手》,发布在了Windows商店。众所周知,无论是WinRT,SilverLight还是WP开发,他们的技术体系基本是相通的,都源于WPF,拥有熟悉的依赖属性,数据绑定,XAML等。针对这些内容的学习,为以后做UWP开发做了一些铺垫。
早在14年10月初,微软就开始了Windows Insider计划,我也加入了其中。对,我不只希望做一名Insider,更希望做一个懂开发的Insider。也就在15年初的时候,微软的Windows10开发已经在整个微软圈子里面开始火了起来,许多以前的WP开发者也都来踩坑。我也正式在这个时候开始学习UWP开发。同样的,UWP开发也有纯正的WPF血统,入门还算顺利。在随后的UWP学习和开发中,对XAML,数据绑定,依赖属性等概念又有了深一步的认识。在15年后半段,我第一个像样的校园助手《工大助手》初版正式完成具备了一些基础的查询功能。后来又陆陆续续修改,添加了一些新的东西。期间也对基本学习到了UWP平台的东西有了更多一步的认识。直到后来。
后来Xamarin来了。
在我的950XL频繁罢工后,我意识到信仰和生活是有差距的,于是我入手了第一台自己的安卓设备——小米5。很自然的,遇到了一个现实的问题:在我的大学里,并没有一款像样的安卓版校园助手。怎么办呢?自己来做。其实决定做安卓版的《工大助手》,有一个重要的原因是我被Xamarin这个技术吸引了。这个时候Xamarin开发在跨平台开发领域愈发火热,包括微软收购Xamarin并且宣布Xamarin免费。我一个.net系的伪程序员,在对Java无感,而又不想深入学习安卓的情况下,Xamarin成我了我的理想工具。在Xamarin.Forms中,我可以用熟悉的Xaml、喜爱的C#来开发安卓和IOS应用,简直太完美了。说干就干,我开始正式踩坑。
用Xamarin.Forms开发的好处在于它的逻辑代码全部采用C#编写,不用去学习IOS和安卓的细节知识,而且有比较完善的MVVM框架可用。在我之前的UWP校园助手项目中,我使用了MVVM开发模式,所以从UWP项目到Xamarin.Forms项目,在一定程度上就等价于更换掉MVVM的View层。代码的复用率达到了70%左右。虽是恰巧,可细想也是必然。于是我断断续续用了一周的时间,把《工大助手》成功用Xamarin.Forms重写了,并且发布了可用的APK。值得一提的是,我在此期间对Android的了解基本为0,一切工作都是Xamarin替我完成的。
在实际的开发中,大问题没有,小问题却也不断。按照整个流程,大致理了理。
第一步是环境的安装:
Xamarin开发工具既可以用Xamarin for VS,也可以用Xamarin Studio。本着对VS比较熟悉和喜爱,我选择了用VS。安装VS2015的时候,可以选择添加Xamarin工具。安装过程其实说复杂也不复杂,大家虽然很多人遇到问题,但问题莫过于无法安装安卓相关的一些工具和SDK,解决办法也很简单,找个好点的梯子,所有问题都没有了。值得一提的时候,就在我写这篇博客的当天2016.12.08,谷歌在大陆的开发者网站上线了,地址是https://developers.google.cn/,此处应该有掌声。
第二步是建立项目:
在VS中可以选择Cross-Platform——Xamarn.Forms相关的模板建立项目,一般项目分为Portable和Shared两种方式,这个要根据需求选择,但一般选择Portable也没问题。在MVVM框架的选择中,我纠结了好久,最后选择了微软自家Prism框架,它提供了对Xamarin的良好支持,自带一个项目模板,可以直接在新建项目的时候选择该模板建立Xamarin.Forms项目,它会为我们自动搭建好一个MVVM的框架,使我们专注于自己的核心业务逻辑。至于该框架的介绍对比,博客园中有大神已经写博分析过了。
以上两步虽然简单,但是确实我们开发Xamarin的基础和敲门砖。在这儿引用博客园大神的相关文章:
老司机学新平台 - Xamarin开发环境及开发框架初探(http://www.cnblogs.com/teddyma/p/xamarin_perfect_dev_env_and_frameworks.html)
老司机学新平台 - Xamarin Forms开发框架二探 (Prism vs MvvmCross)(http://www.cnblogs.com/teddyma/p/xamarin_dev_framework_research_2.html)
电脑快没电了,所以这是一个连载系列……
[Xamarin]我的Xamarin填坑之旅(一)的更多相关文章
- bootstrap-table填坑之旅<一>认识bootstrap-table
应公司需求,改版公司ERP的数据显示样式.由于前期开发的样式是bootstrap,所以选bootstrap-table理所当然(也是因为看了bootstrap-table官网的example功能强大, ...
- React Native填坑之旅--与Native通信之iOS篇
终于开始新一篇的填坑之旅了.RN厉害的一个地方就是RN可以和Native组件通信.这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是.自定义视图的使 ...
- React Native填坑之旅--Flow篇(番外)
flow不是React Native必会的技能,但是作为正式的产品开发优势很有必要掌握的技能之一.所以,算是RN填坑之旅系列的番外篇. Flow是一个静态的检查类型检查工具,设计之初的目的就是为了可以 ...
- React Native填坑之旅--布局篇
代码在这里: https://github.com/future-challenger/petshop/tree/master/client/petshop/src/controller 回头看看RN ...
- 使用vue开发微信公众号下SPA站点的填坑之旅
原文发表于本人博客,点击进入使用vue开发微信公众号下SPA站点的填坑之旅 本文为我创业过程中,开发项目的填坑之旅.作为一个技术宅男,我的项目是做一个微信公众号,前后端全部自己搞定,不浪费国家一分钱^ ...
- https填坑之旅
Boss说,我们买了个权威证书,不如做全站式的https吧,让用户打开主页就能看到受信任的绿标.于是我们就开始了填坑之旅. [只上主域好不好?] 不好...console会报出一大堆warning因为 ...
- stm32填坑之旅 - stm32f103c8t6点亮板载贴片蓝色LED
转载请注明:https://www.cnblogs.com/rockyf/p/11691622.html 开篇 开篇一定要精彩,不然路人不理睬!下述是笔者作为arm小白的填坑之旅 没错,这个之前一直从 ...
- [Xamarin]我的Xamarin填坑之旅(二)
上一篇交代了我Xamarin填坑的背景,大概聊了聊第一步环境配置,第二步创建项目和开发框架选择.如果有一个可用的梯子,这部分基本不会出错. 接下来就具体聊一聊写代码的过程中遇到的一些事儿. 第三步是码 ...
- React Native填坑之旅--Stateless组件
Stateless component也叫无状态组件.有三种方法可以创建无状态组件. 坑 一般一个组件是怎么定义的: 很久以前的方法: const Heading = createClass({ re ...
随机推荐
- C++ 模板的全特化与偏特化
模板为什么要特化,因为编译器认为,对于特定的类型,如果你能对某一功能更好的实现,那么就该听你的. 模板分为类模板与函数模板,特化分为全特化与偏特化.全特化就是限定死模板实现的具体类型,偏特化就是如果这 ...
- stuff函数(转)
在上篇博文中提到了stuff函数 在这篇博文中对stuff函数进行了详解 本片博文系转载,但对原文顺序做了下调整 示例 以下示例在第一个字符串 abcdef 中删除从第 2 个位置(字符 b)开始的三 ...
- Excel日期格式调整
3-Aug-2008 自定义格式: [$-809]d-mmm-yyyy;@ Aug-2008 自定义格式: [$-809]mmm-yyyy;@
- ajax请求工具类
ajax的get和post请求工具类: /** * 公共方法类 * * 使用 变量名=function()定义函数时,如果在变量名前加var,则这个变量变成局部变量 */var Common = ...
- nginx accept() failed (24: Too many open files)
nginx服务器出现如下信息: [crit] 17221#0: accept4() failed (24: Too many open files) [crit] 17221#0: accept4() ...
- dede5.7 GBK 在php5.4环境下 后台编辑器无法显示文章内容
问题的原因是:是htmlspecialchars,PHP 5.4后GBK编码下默认不支持中文,转换后内容为空,UTF-8编码没有任何问题. 解决方法如下: 在\include\ckeditor\c ...
- ueditor使用注意
问题1:后端配置项没有正常加载,上传插件不能正常使用! 我用的是开发版,1.4.3.3 .Net版 网上查了很多,后来发现只是配置的问题而已. 1.在根目录下:config.json 其中有Img上传 ...
- WCF生成客户端代理对象的两种方法的解释
最近在封装WCF,有一些很好的实践就记录下来,大家可以放心使用,所有代码都已经调试过.如果有高手可以大家探讨一下. 在WCF中有两种不同的方法可以用于创建客户端服务对象,他们分别为: 1. 代理构造法 ...
- JVM 系列 ClassLoader
JVM 系列()ClassLoader 在前面一节中,主要介绍了 Class 的装载过程,Class 的装载大体上可以分为加载类.连接类和初始化 3 个阶段.本小节将主要介绍绍 Java 语言中的 C ...
- swift 添加webview
swift显示HTML代码 在布局中的方法 1.根据URL 直接显示内容, var urls : NSURL = NSURL(string: "http://www.baidu.com&q ...