本文将介绍以Android为重点的C#跨平台移动应用程序开发工具——Mono for Android 4.0的基本信息。
Xamarin公司概述
公司创建于2011年,一直秉承快速、轻松、快乐的开发原则打造精品移动应用程序。
Xamarin产品:
MonoTouch,Mono for Android
简化创建、维护及操作流程,实现本地UX移动应用程序的高性能及跨平台特性
手机、平板设备及嵌入式设备----IOS,Android以及windows
Mono项目:以C#及.NET 框架为基础的夸平台开源工具。
MonoTouch与Mono for Android
跨平台分享代码 通过在IOS与android之间分享数据结构及非代码以节约开发时间
便于本地访问API:访问数以千计本地IOS及android API
利用现有的.NET 技能:充分利用您的.NET技能,并通过C#代码及类似库为移动应用程序编写代码
服务于多种移动设备平台:轻松为IPhone,iPad,IpodTouch以及android设备编写应用程序
强大的现代框架:利用现代、强类型且支持资源回收的框架编写代码。
丰富的IDE支持:丰富的IDE帮您实现自动完成全支持,或者使用Visual studio for android进行开发
本地API访问--Android
4000个C#类
1:1映射至本地
java库
OpenGL
Android C库
映射至C#
强类型Enumerations
C#时间/属性
表层λ
本地API访问--IOS
1700C#类
1:1映射至本地
对象-C库
核心基础IOS C libraries
映射至C#
强类型Enumerations
C#事件/属性
表层λ
Mobile设备上的Mono
移动设备上的C#与.NET类库
资源回收
强类型对象
高性能
强类型
代码实现从IDE中 帮助搜索API
在编辑过程中提醒开发人员错误信息,避免用户在运行中遭遇故障
Mono for Android4.0--关键功能
支持Android 4.0各种功能
快速创建
进一步降低应用程序最低消耗
谷歌地图整合
Visual Studio 整合
比Java更快的安装流程
Mono forAndroid 4.0--ICS功能
上传用户界面
网格布局--支持2D网格布局控制
窗口切换--允许选择启用与关闭
纹理视图--可在视图中使用视屏及OpenGL内容
导航栏--包含多个虚拟按钮,例如后退、主页及其他任务
更好的硬件加速效果
所有针对Android系统的2D处理都交由GPU负责,另外,默认状态下硬件加速始终开启,并能正确作用于所有为Android4.0开发的应用程序。
新数据APIs
原本无法直接访问的数据如今拥有了访问通道,例如日程表数据以及设备持有者本人的配置信息等
应用程序数据共享
现在可以轻松在应用程序以及设备之间共享数据
ShareActionProvider:帮用户利用动作条轻松进行共享操作
专为近距离无线通讯打造的Android Beam:只要将两台设备放在一起,即可轻松共享数据。
Mono for android 4.0--快速创建
创建提速达40%
等待时间更短
为大家的应用程序开发工作节约时间
Mono for Android4.0--降低应用程序最低消耗
最高可缩减70%应用程序体积
帮助应用程序用户在下载方面节约大量时间
高效连接流程
在基础类库配置过程中检测应用程序并移除任何无法直接使用的组件
以System.dll文件中的整体命名空间为例。它会在发送及接收打字邮件时发挥作用,但如果用户的应用程序完全用不到这一功能,那么对应代码无疑是在浪费空间。在这种情况下,内容将被移除。
在调试及发布阶段,实现高效软件包部署
Mono for Android4.0--集成谷歌地图
最新绑定谷歌地图API
Mono.Android.GoogleMaps.dll允许开发人员从C#调用谷歌地图API
Mono for Android 可与Visual Studio协作
无需更改IDE
也可使用Xamarin全功能MonoDevelop IDE
Mono for Android--更加方便快捷的安装程序
Mono for Android 安装程序使用户只需数次点击即可完成安装
总结
能够驾驭C#及.net的全部性能,将Web Services JSON,classes,linq以及xml引入跨平台移动应用程序开发
利用Visual Studio创建强大的android应用程序
现有.NET 代码及逻辑均能重复使用
降低开发工作耗时、复杂性及成本
代码长度更短、内容更简明且维护更方便
创建用户喜爱的本地用户使用体验。
2013-03-31 09:56 by JustRun, 886 阅读, 评论, 收藏, 编辑
做了很长时间的开发,也带过一些项目,有过很多成功和失败的经历。
一些失败的项目不断促使自己思考如何才能把项目做成功,也看了一些关于项目管理和敏捷开发方面的书籍。
自己总结下来,发现项目失败的原因大概是两方面:
1. 缺少方法, 不知道如何应当使用那些方法来保障项目的成功。
这个方面可以通过请教、多看书、不断实践来提高。
2. 还有一个重要原因是人性的弱点,"超越规则"的侥幸心理。
近期报道的中国式的过马路,凸显了国人不遵守规则的心理。因为人总会认为自己是个特例,明知道规则的情况下,总是认为自己能够超越规则而能够成功或者避免惩罚。
这也是软件项目中同样的失败案例不断重现的原因,即使我们有前人总结过的经验教训。
比如:
你明知道这个项目不可能在3个月内完成,但是迫于老板的压力,你会觉得自己能够超越当前开发效率满足这个不切实际的幻想。
下面是我总结的一些团队开发的规范,只是初稿,非常欢迎园友有其它的建议或者补充。
"你我是朋友,各拿一个苹果彼此交换,交换后仍然是各有一个苹果;倘若你有一个思想,我也有一种思想,而朋友间交流思想,那我们每个人就有两种思想了。"
项目经理
1. 项目开始前组织培训
使用的工具和技术, 如git, log4net, Resharper, Redmine, NAnt等
项目编码规范
项目使用的框架和设计培训
2. 每日构建
每日构建要能够自动化执行。
覆盖以下内容来保证项目质量:
单元测试的代码覆盖率达到90%,每日构建能够成功通过
所有代码运行过程, log4net可跟踪
通过自动化的验收测试
每天使用NAnt做每日构建,运行单元测试,代码质量检查,代码重复检查,安装包制作和发布
3. 关于测试数据
在项目开始时,着手准备建立和维护一套数据库结构和测试数据,测试数据要达到以下要求:
测试数据应当全员用一套,可以方便的导入和恢复到初始状态
测试的数据库结构和数据要有版本管理
测试数据应当用相对有意义的数据,比如User Name 不能用asdfasdfas这种, 而用Peter, Jim等。
当bug发生时,如果可以通过补充特例的测试数据达到覆盖bug的效果,应当补全这部分测试数据
4. 每日的站会和分享
组织项目成员站会,关注项目block issue
成为站会的组织者而不是领导者,发挥集体成员的主动性来解决问题和分享经验。
分享的内容与重要,大小无关。可能只是发现了一个更好的Api的使用,一个变量命名不好的错误等。
让团队成为一个自主的,自我提高和修正错误的团队。
5. 关于知识分享工具
团队中不断建立的规范、知识、用户需求等,需要有种方式记录和传播。以避免进入新的成员时,只能依靠经验和记忆等不可靠手段来传递的方式。
推荐使用Wiki
6. 关于项目中使用的第三方API或控件
使用第三方API或控件时, 任何对商业使用收费,或者免费但不开源的,都需要得到客户的认可和同意付费
团队需要考虑第三方API或控件的稳定性,和可维护性,避免开源项目暂停或者停止维护等问题
如果是和客户的技术团队合作,即使使用开源和免费的,也需要得到对方的同意。
开发人员规范:
添加注释
1. 类注释
类的注释,需要描述类的功能、依赖和如何使用
2. 代码注释
复杂的逻辑应当添加注释
3.使用Region
使用关键字region注释使代码更加整洁
4.全局变量注释
每个全局变量需要写注释
5. 程序流程变化注释
switch, if, while 等条件判断地方必须写注释
6. public方法注释
public的方法体中的代码,需要写好详尽的注释
编码规范
1. 单行代码宽度不能超过150, 单个.cs文件长度不能超过600行. if, while, for, switch等的嵌套必须<=3
2. 少定义委托,多使用Event, Func, Action 和 Predicate
3. 对于public的函数, 不要太长,可以分拆成多个private方法减少代码长度.
4. 变量命名
4.1 控件的名称,不允许是button1, textbox1这种无意义的名字
4.2.使用能读懂的命名(尽量使用全名)
4.3 Event等delegate的命名
Event的命名要体现出事件, 如...Changed, 体现发生了什么,而不是告诉要做什么
bad: publicEventHandler ExtendOrderDetails;这里直接告诉别人做什么
good: public Action<bool> OrderTrackTypeChangedToOther; 这里只是告诉别人发生了什么
单元测试
1.尽量在项目中覆盖单元测试,依据项目不同,团队可以制定自己的标准(如代码覆盖率等)
2.修复bug前,先写单元测试覆盖bug, 然后再fix bug
类
1.单一职责
业务逻辑类中不要包含界面相关代码
切实保证这个类中的代码,和类的名字(定义)一致。
只告知外界本类内部发生的事情,不要直接发指令让外界做什么。例子: 类中的delegate, event, 是用来告诉类内部发生了什么,不要指导外界做什么。
尽量隐藏类内部的实现细节。比如MS的File类,包含操作文件的方法实现,但是外界不需要知道具体如何实现的。
2.类应当尽量依赖其它小的类,依赖的其它的类应该尽量放到构造函数中
假如有一个拧螺丝的功能类,只需要一个扳手就能解决问题,那么不要让这个类依赖于一个工具箱
3.减少依赖于类, 应当更多的依赖于接口
把上面的扳手类抽象成一个接口,让拧螺丝的功能类依赖于接口
4.尽量少的使用全局变量
全局变量需要写好注释,解释全局变量的作用
全局变量不要在类中的私有方法中使用
测试人员
参考下面的文章
如何有效地报告 Bug
其它相关文章:
对于getting real开发结合自己的工作的一些思考
韩非子中的管理故事1(明辨人才)
韩非子中的管理故事2 (赏罚)
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】按钮。
如果,您希望更容易地发现我的新博客,不妨点击一下右下角的【关注 Justrun】。
因为,我的写作热情也离不开您的肯定支持。
感谢您的阅读,如果您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是Justrun 。
随笔分类 -Linux系统学习
2012-09-20 17:10 by JustRun, 31 visits, 网摘, 收藏, 编辑
摘要:cygwin中的根目录下有个目录 /cygdrive通过这个目录就可以访问到windows的各个分区了
阅读全文
2012-07-24 19:24 by JustRun, 197 visits, 网摘, 收藏, 编辑
摘要:常用的基本命令clear 清空界面cd 进入目录ls 列出文件和目录ll 列出文件和目录ls -d 查看目录属性tree 显示文件和目录结构pwd 打印当前目录mkdir 创建目录rm 移除文件rm -rf ...
阅读全文
2010-01-27 22:54 by JustRun, 52 visits, 网摘, 收藏, 编辑
摘要:解压命令大全 gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName .tar.gz 解压:tar zxvf FileName.tar.gz 压缩:tar zcvf FileName.tar.gz DirName --------------------------------------------- .bz2 解压1:bzip2 -d FileName.bz2 解压2:bunzip2 FileName.bz2 压缩: bzip2 -z FileName .tar.bz2 解压:tar jxvf FileName.
阅读全文
- Categories: Linux系统学习
- Tags: linux
随笔分类 -Linux系统应用
2012-11-11 11:29 by JustRun, 36 visits, 网摘, 收藏, 编辑
摘要:出自 http://www.bytea.net/material/80-pc/312-tarsplit记得以前用3.5寸盘的时候常需要把一个文件分成几张盘来拷贝,现在的U盘越来越大,还有众多的网上存储空间,好久没用分割文件了。不过有的时候还是需要 分割文件的,比如从虚拟主机上下载一个打包的备份文件,而网速又比较慢,容易下载一半中断。又比如需要打包备份一个硬盘里的东西,不过一张dvd的容量只 有4.7G,不够用怎么办?这就需要用到split命令了。举例说明:要将目录logs打包压缩并分割成多个1M的文件,可以用下面的命令:tar cjf - logs/ |split -b 1m - logs.t
阅读全文
2012-10-26 01:55 by JustRun, 75 visits, 网摘, 收藏, 编辑
摘要:在windows下使用cygwin下的git访问需要https连接的git repository(比如github)时,有时会报告错误:error: error setting certificate verify locations: CAfile: /usr/ssl/certs/ca-bundle.crt CApath: none while accessing https://github.com/username/repositoryname/info/refsfatal: HTTP request failed这是因为缺少证书所致。重新运行cygwin的setup.exe,然后安装c
阅读全文
2012-10-25 09:16 by JustRun, 141 visits, 网摘, 收藏, 编辑
摘要:使用git从一些开源的项目下载源代码,经常会遇到被封的情况。如果是 git clone http:// 或 git clone https:// 的话直接把代理服务器加到环境变量就可以了:$ export http_proxy="http://username:
[email protected]:9999/"$ export https_proxy="http://username:
[email protected]:9999/"or$ export http_proxy="http://127.0.0.1:9999/"$ exp
阅读全文
2012-10-16 08:36 by JustRun, 94 visits, 网摘, 收藏, 编辑
摘要:#OS junk files[Tt]humbs.db*.DS_Store#Visual Studio files*.[Oo]bj*.user*.aps*.pch*.vspscc*.vssscc*_i.c*_p.c*.ncb*.suo*.tlb*.tlh*.bak*.[Cc]ache*.ilk*.log*.lib*.sbr*.sdf*.opensdf*.unsuccessfulbuildipch/obj/[Bb]in[Dd]ebug*/[Rr]elease*/Ankh.NoLoad#MonoDevelop*.pidb*.userprefs#Tooling_ReSharper*/*.resharp
阅读全文
2012-10-15 06:48 by JustRun, 76 visits, 网摘, 收藏, 编辑
摘要:选择菜单选项->首选项->字幕选择默认字幕编码cp936(简体中文)和正确的中文字体
阅读全文
2012-08-09 20:54 by JustRun, 125 visits, 网摘, 收藏, 编辑
摘要:在vim中使用"*y使用进行复制,然后在应用程序中用ctrl+v粘贴。 从应用程序到vim则在应用程序中使用ctrl+c复制,在vim中使用shift+insert粘贴。(在vim中使用Shift+Ctrl+V也可以)
阅读全文
2012-06-08 08:13 by JustRun, 119 visits, 网摘, 收藏, 编辑
摘要:以前用Thinkpad R60的时候,没有触摸鼠标,只能用小红帽,特别羡慕别人的触摸鼠标。现在换了一台新的,有了触摸鼠标才发现这个东西太坑爹了,在你写东西的时候,一不小心,鼠标就不知道飘到哪里去了。由于在Linux下使用的比较多,特地查了一下在Linux下如何关闭触摸鼠标在命令窗口中: #synclient touchpadoff=1 关闭触摸鼠标 #synclient touchpadoff=0 打开触摸鼠标R60的夜灯也不错,很适合我们这种晚上黑灯瞎火的时候喜欢写写代码的程序员。为什么联想不保留这个功能呢,很怀念我的第一台笔记本
阅读全文
2012-02-19 15:18 by JustRun, 89 visits, 网摘, 收藏, 编辑
摘要:在linux下的中文输入法一直是一个比较头疼的问题。sudo apt-get install fcitx-sunpinyin配上sogou的词库http://code.google.com/p/hslinuxextra/downloads/list下载覆盖即可。
阅读全文