一想到明天是星期五,不对,是今天,心里就很激动,毕竟明天没课。激动之余,来写一篇博客,记录一下最近踏坑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填坑之旅(一)的更多相关文章

  1. bootstrap-table填坑之旅<一>认识bootstrap-table

    应公司需求,改版公司ERP的数据显示样式.由于前期开发的样式是bootstrap,所以选bootstrap-table理所当然(也是因为看了bootstrap-table官网的example功能强大, ...

  2. React Native填坑之旅--与Native通信之iOS篇

    终于开始新一篇的填坑之旅了.RN厉害的一个地方就是RN可以和Native组件通信.这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是.自定义视图的使 ...

  3. React Native填坑之旅--Flow篇(番外)

    flow不是React Native必会的技能,但是作为正式的产品开发优势很有必要掌握的技能之一.所以,算是RN填坑之旅系列的番外篇. Flow是一个静态的检查类型检查工具,设计之初的目的就是为了可以 ...

  4. React Native填坑之旅--布局篇

    代码在这里: https://github.com/future-challenger/petshop/tree/master/client/petshop/src/controller 回头看看RN ...

  5. 使用vue开发微信公众号下SPA站点的填坑之旅

    原文发表于本人博客,点击进入使用vue开发微信公众号下SPA站点的填坑之旅 本文为我创业过程中,开发项目的填坑之旅.作为一个技术宅男,我的项目是做一个微信公众号,前后端全部自己搞定,不浪费国家一分钱^ ...

  6. https填坑之旅

    Boss说,我们买了个权威证书,不如做全站式的https吧,让用户打开主页就能看到受信任的绿标.于是我们就开始了填坑之旅. [只上主域好不好?] 不好...console会报出一大堆warning因为 ...

  7. stm32填坑之旅 - stm32f103c8t6点亮板载贴片蓝色LED

    转载请注明:https://www.cnblogs.com/rockyf/p/11691622.html 开篇 开篇一定要精彩,不然路人不理睬!下述是笔者作为arm小白的填坑之旅 没错,这个之前一直从 ...

  8. [Xamarin]我的Xamarin填坑之旅(二)

    上一篇交代了我Xamarin填坑的背景,大概聊了聊第一步环境配置,第二步创建项目和开发框架选择.如果有一个可用的梯子,这部分基本不会出错. 接下来就具体聊一聊写代码的过程中遇到的一些事儿. 第三步是码 ...

  9. React Native填坑之旅--Stateless组件

    Stateless component也叫无状态组件.有三种方法可以创建无状态组件. 坑 一般一个组件是怎么定义的: 很久以前的方法: const Heading = createClass({ re ...

随机推荐

  1. python之多并发socket

    先看socket多并发的服务端的代码,这里是用多线程实现的多并发socketserver import socketserver # socketserver有四个基本的类,后两个不常用,这4个类处理 ...

  2. postman 使用 - 连接不到接口

  3. nginx安装及基础配置(含jdk安装及配置)

    0.jdk安装配置 #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-linux-x64.tar.gz tar -xzf jdk-7u25-linux-x64.tar.gz m ...

  4. Codeforces 612B. Wet Shark and Bishops 模拟

    B. Wet Shark and Bishops time limit per test: 2 seconds memory limit per test: 256 megabytes input: ...

  5. OSGi 系列(三)之 bundle 事件监听

    OSGi 系列(三)之 bundle 事件监听 bundle 的事件监听是在 bundle 生命周期的不同状态相互转换时,OSGi 框架会发出各种不同的事件供事先注册好的事件监听器处理. 1. 事件监 ...

  6. lnmp vhost 虚拟目录配置

    以前常用Windows 很熟悉,lnmp 配置虚拟目录也很简单. 安装完lnmp环境之后,在nginx的配置文件夹下,我采用的方法是复制default.conf 然后重命名为vhost_a.conf ...

  7. stl学习记录(1)

    Effective STL 中文版学习记录 条款4 判断容器是否为空 使用empty而不是size().size()操作在实现上不是一个时间常数操作条款5 尽量使用区间成员函数代替它们的单元素兄弟.S ...

  8. Oracle sql的基本优化写法和思路。

    首先简单介绍下常规的sql优化的方式: 1.肯定有人说建索引啊. 2.数据量实在太大,建分区啊. 3.其实基于目前公司的业务还有一种办法那就是向上聚集表.根据查询业务,专门抽取上来一张表,直接做到se ...

  9. window.load 和$(document).ready() 、window.load和body onload区别

    1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行. $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕.2.编写个数不同 w ...

  10. 541. Reverse String II

    static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...