MonoForAndroid 第一章 Android、移动设备和Marketplace 简介
在配置好开发环境之后,接下来就开始了MonoForAndroid的学习了,在进入开发之前,先对一些基本的知识做一个简单的介绍。写的可能比较乱也可能比较啰嗦,大家见谅。
在过去的几年中,智能手机的使用以惊人的速度增长。与桌面计算机不同的是,智能手机的增长和普及也带来了竞争,目前还没有任何一家或者平台统治了移动设备市场;移动设备可以使用Symbian、Research in Motion、windows mobile、android以及其他平台。此外,设备也可以运行相同的操作系统,并以不同的外观样式呈现给用户。市场上所存在的这种裂痕是开发人员面临着一个非常大的问题:他们如何使用已有的某种开发框架或工具,以及如何使用关于某种设备的相关知识?
本章将会介绍.NET/C#开发人员如何在拥有最高平台知名度的只能手机(Android)上完成开发工作。
1.1 产品比较
本小节将介绍.NET Framework、mono以及mono for android。这些产品允许数量庞大的Android开发人员针对Android移动设备家族进行开发。
.NET Framework
该框架基于一种用来执行针对框架所编写的软件的虚拟机,这种虚拟机环境称为CLR,主要负责安全、内存管理、程序运行以及异常处理。
在.NET Framework中编写的应用程序的源代码最初被编译为一种名为MSIL的中间语言,该初始编译由特定的命令行编译器来执行,而当执行应用程序是通常会执行二次编译,二次编译将会获取中间语言并将其编译为可在操作系统中运行的可执行代码,二次编译被称为JIT编译。
该框架是独立于语言的,并可以使用多种语言。如VB、F#、C++、C#。
该框架包含了为不同语言提供一致功能的一系列库,这些库称为基类库。
但是该框架有个缺点:非Microsoft平台无法使用该框架。
所有这一切的意义在于Microsoft为.NET Framework创建了一个基于标准的环境,让许多低级别的开发人员可以融入到.NET Framework。
Mono
Mono是一个在非Windows操作系统中提供C#编译器和CLR的开源项目。可在Mac、Linux、BSD以及其他操作系统中运行。通过C#编译器,还可在mono中运行其他语言,其中包括F#、Java、Scala和Basic等。
Mono的创始人是Miguel Icaza 。至于这个人的介绍我就不说了,大家可以百度一下或者Google一下都可以的。
虽然期望mono的功能可以尽可能多的于.NET Framework的功能相匹配,但这是不可能的,因为Microsoft拥有更多的资源,并且在这些功能的开发上具有先起步的优势,Xamarin最多只能实现.NET Framework中大多数的API,但是稍滞后一些。
.NET/Mono和Android存在的其中一个缺点是.NET/Mono开发人员不能在Android平台上利用他们已有的.NET/Mono/C#相关知识。.NET/Mono开发人员不能够针对Android进行开发,因为他们是两个完全独立的实体。基于MonoTouch(允许C#开发人员针对Apple的iPhone进行开发)的经验,于是就有了Mono for Android 。。。
Mono For Android
Mono for Android所公开的API是.NET Framework 4 的核心功能、Silverlight API以及本机Java VM 的组合。Mono for Android的本机API于.NET以及C#开发人员所熟悉的API之间提供了一个桥梁(互操作)层。
Mono for Android由一组针对移动平台进行优化的程序集、命名空间以及类组成。
命名空间和类:
Mono.Android.dll | 该程序集提供了于Android API的C#绑定,其中包括了支持Android.* 命名空间的命名空间 |
System.dll | 该程序集为Mono for Android 提供了许多.NET Framework功能 |
Momo.data.Sqlite.dll | 该程序集是针对本机SQLite数据库的ADO.NET提供程序 |
Mono.Data.Tds.dll | 该程序集提供了对TDS协议的支持,而该协议主要用于连接Sql Server |
OpenTK.dll | 该程序集提供了对OpenGL的支持 |
System.Json.dll | 该程序集提供了对使用JSON的支持 |
System.ServiceModel.dll | 该程序集提供了对WCF的支持 |
System.Xml.dll | 该程序集提供了对XML的支持 |
System.Xml.Linq.dll | 该程序集提供了从 LINQ 到XML 的支持 |
下面是mono for android 提供的一些非常重要的命名空间 | |
Android | Android.* 命名空间提供了对资源、类以及应用程序权限的支持 |
Android.Bluetooth | 该命名空间提供了对蓝牙的支持 |
Android.Database | 该命名空间提供了对设备上的Sqlite数据库的支持 |
Android.Graphics | 该命名空间提供了对图形显示的支持 |
Android.Hardware | 该命名空间提供了对Android设备上硬件的支持 |
Android.Location | 该命名空间提供了对位置的必要支持 |
Android.Net | 该命名空间提供了对网络的支持,其中包括对VoIP(Voice over IP)和Wifi 的支持 |
这些命名空间只是mono for android 中可用命名空间中很小的一部分,他们的功能不言自明。这些命名空间是特定于Android的,使用它们所编写的代码只能在基于Android的设备上运行。
1.2 移动开发
当要构建应用程序时,需要牢记几个要点:
(1) Android模拟器适合于进行初始测试,并不是对于所有测试都是准确的,应该在不同版本的Android设备中完成最终测试。
(2).NET 的可执行文件都非常小,因为这些文件可以使用框架的共享副本。Mono for Android可以按照两种不同的方法来部署应用程序,其中最常用的方法是将应用程序和mono for android 绑定到一起,第二种方法是让应用程序共享Mono框架
(3)成为设备上的一个好公民是非常重要的。
除了为Android构建应用程序所涉及的技术问题外,开发人员还需要了解一些设计问题:
(1)不要先为一个桌面环境设计一个应用程序,然后再将其缩减到android或任何移动设备中。
(2)Android模拟器是一个非常好的工具,但不要将测试限制在此工具中。
(3)当在移动设备上进行测试时,虽然Wifi也是一种移动网络,但通常办公室或家中的Wifi可以提供比移动运营商的网络更高的质量。
1.3 Android
Android的发展历史我也不说了,有兴趣可以百度一下或Google一下
在移动设备上运行应用程序是,开发人员必须考虑的几个问题:
(1) 存在非常多的外观大小、屏幕大小以及设备,所以开发人员必须要考虑设备的差异。
(2)开发人员必须考虑Android操作系统的不同版本。
(3)开发人员必须抱着实事求是的态度对待Android market 所提供的关于应用程序的销售数字。
1.4 跨平台替代方案
除了mono for android外,还有其他的跨平台的移动开发工具,如PhoneGap、Appcelerator Titanium、RhoMobile Rhodes
当选择跨平台工具时,要考虑许多不同的情况。某些情况下,选择某些工具可能会提供过于简单的解决方案,并且使维护/功能变得非常难以处理甚至不可能处理。。。因此选择一款合适的工具是很重要的。
本章就介绍到这里,回顾下:
对.NET Framework 和 Mono进行了一下简单的比较
移动开发、Android以及跨平台工具应该注意的事项和一些简短的介绍。
欢迎大家拍砖。。。