Android本身是一个操作系统,也是供其上的应用程序进行开发的软件平台。同时,一些日常任务,如 web浏览、收发email等,被作为核心应用程序加入到了Android手机中。
作为开放手机联盟一个强大而开源的无线应用开发环境,Android是一个新兴的移动开发平台。设计这一平台的唯一目的是促成一个受移动用户和软件开发人员欢迎的、自由而开放的市场。
1:Android的基本体系结构
Android平台的设计使得其比之前的平台具有更强的容错能力。Android手机设备运行在Linux操作系统下,这使得其上运行的Android运用程序具有很强的安全性。每一个Android应用程序均在其自身的虚拟机(virtual machine)中运行(如下图)。Android应用程序为托管代码(managed code),所以,由应用程序而导致系统崩溃的可能性很小,这也降低了设备崩溃(device corruption)的可能性。
![Android平台介绍 Android平台介绍](http://3aj.cn/common/pic/android_introduce.jpg)
1.1:Linux操作系统
Linux 2.6内核作为硬件抽象层(Hardware Abstraction Layer, HAL)在手机物理硬件与Android软件栈之间处理核心系统服务。
内核负责处理一些核心功能,包括:
a:应用程序强制执行的权限和安全
b:低级(low-level)的内存管理
c:进程管理和线程操作
d:网络协议栈
e:显示、键盘输入、摄像头、wifi、闪存(flash memory)、声音、Binder(IPC)
1.2:Android应用程序运行时环境
每一个Android应用程序均在不同的进程中,这一进程对应一个 Dalvik虚拟机(Virtual Machine,VM)的实例(instance)。基于java虚拟机, Dalvik为移动设备进行了优化设计。Dalvik虚拟机具有较小的内存占用,而且多个 Dalvik虚拟机的实例在手机设备上可以并发的运行。
2:安全与许可权限
若干种安全措施保障了Android平台的完整性。这些措施有助于保障用户数据的安全,并且避免了硬件设备为而已软件所利用。
2.1:作为操作系统用户的应用程序
在安装了一个应用程序后,操作系统为该应用程序创建一个与之关联的心的用户配置文件。每一个应用程序都作为不同的用户运行,它在文件系统中拥有自己的私有文件、用户ID和一个安全的操作环境。
应用程序在操作系统上使用自己的用户ID、自己的Dalvik虚拟机实例运行在自己的进程内。
2.2:显示定义的应用程序权限
要访问系统上的贡献资源,Android应用程序需要注册所需的权限。有些权限可以允许应用程序使用手机设备的功能来拨打电话,而有些则允许接入网络、控制摄像头和其他硬件传感器。另外,应用程序在访问包括私有(private)和私人(personal)信息在内的共享数据(如用户首选项、位置、联系人信息等)时也需要一定的权限。
2.3:有限的特设(ad-hoc)授权
作为内容提供的应用程序也可能为其他应用程序提供即时的权限,以共享特定的信息。这可以通过使用统一资源标示符(Uniform Resour Identifier,URI)来进行临时的授权与撤销。
URI建立对系统特定的数据资源,如图像、文本等的索引。下面是一个URI的例子,它提供所有联系人的电话号码:
content://contacts/phones
为了了解这种权限的工作方式,让我们来看一个例子。
比方说,有一个应用程序,它用于记录用户的生日愿望,其中某些是可以公开的,而其他是用户不愿透露的,如果这一应用程序需要同其他应用程序共享数据,那么它就可以对公开的“愿望”列表授予URI权限,以允许其他程序访问,而无需指明具体的列表项。
2.4:应用程序通过签名建立用户信任
所有的Android应用程序包均使用证书进行了签名,这样用户可以了解应用程序的可靠性。证书的撕咬(private key)为开发人员所有,这有助于在开发人员与用户之间建立一种信任关系,也使得开发人员可以控制系统上的哪些程序用户访问权。不过,证书的颁发机构是没有存在的必要的,因为自签名的证书也可以被接受。
2.5:市场开发人员注册
要再Android Market上发布应用程序,开发人员需要创建一个账号。Android Market管理非常严密,不允许出现任何恶意软件。
3:开发Android应用程序
Android SDK 提供了一整套广泛的应用程序接口(Application Programming Interface,API),它们既强大又能跟上时代前进的步伐。Android手机设备的核心系统服务是向应用程序敞开的,所有应用程序均可以访问它们。在获得了适当的授权后,Android应用程序之间可以进行数据共享,也可以安全地访问系统上的共享资源。
3.1:Android编程语言选择
Android应用程序使用Java编写,目前,Java语言是程序员在Android平台上进行开发的唯一选择。
也有人推测,其他一些编程语言,如C++,可能会在今后的Android版本中被引入。如果你的应用程序必须依赖于其他语言(如C 或 C++)的本地代码,那么你可以考虑使用Android本地化开发包(Android Native Developm Kit)将他们融合在一起。
3.2:本地(native)与第三方应用程序间没有区别
不同于其他的手机开发平台,在Android平台上没有本地应用程序与开发人员出阿哥家的第三方应用程序的区别。在为应用程序提供适当的授权后,所有的应用程序都拥有对核心库和底层硬件接口相同的访问权。
Android手机设备默认移植了一系列的本地应用程序,如web浏览器、联系人管理本等。第三方应用程序与这些核心应用结合在一起,甚至对他们进行扩展,以丰富用户体验,甚至完全替代一些可选的应用程序。
3.3:常用包(package)
使用Android,移动开发人员再也不用从头做起,进行一些重复而无谓的开发。开发人员可以使用熟悉的Android Java包中提供的类库来完成一些常用的操作,如图形、数据库访问、网络接入、安全通信以及其他功能包(utility)(如xml解析器)。
Android包包含对以下内容的支持:
a:常用用户界面widget(按钮、调节控件(Spin Controls)、文本输入框)
b:用户界面布局
c:网络安全和web浏览功能(SSL、WebKit)
d:结构化存储和关系型数据库(SQLite)
e:强大的2D和3D图形(包括 SGL 和 OpenGL ES)
f:音频和影音媒体格式(MPEG-4、MP3、静态图片)
g:对可选硬件设备的访问,如对位服务(Location-Based Services,LBS)、wifi、蓝牙和其他硬件传感器
3.4:Android应用程序架构
Android应用程序架构提供开发一般应用程序的全部所需。Android应用程序的生存周期内包括以下关键组件:
a:Activity 是应用程序所执行的一系列函数
b:一组视图(view)定义了应用程序的布局
c:Intent告知系统应用程序的计划(plan)
d:服务(Service)使得程序可以进行后台处理而无需与用户进行交互
e:通知(Notification)用于告知用户某些事件的发生
Android应用程序可以使用一系列的管理器(manager)同操作系统和底层硬件进行交互。每一个管理器负责保存部分底层系统服务的状态。例如,LocationManager可以简化与手机定位服务之间的交互,ViewManager 和 WindowManager 管理用户界面基础(fundamental)。
应用程序可以同其他应用程序进行交互,或者作为ContentProvider。诸如联系本这样的内建应用程序即为“内容提供”程序,它可以允许第三方应用程序访问联系人数据,并且可以毫无限制的使用它们。
小结:移动软件的开发随着时间不断向前发展。Android成为了一种新的移动开发平台,它建立在之前成功经验的基础上,同时避免了其他平台过去的失败。Android的设计大大增强了开发人员的能力,以开发出具有创新特色的应用程序。这一平台完全开源,没有前期费用,使得开发人员可以充分享受到比其他平台上进行开发更多的乐趣。