
1.1 Android简介
智能手机软件平台有Symbian、Windows Mobile、RIM BlackBerry、Android、iPhone、Palm、Brew、Java/J2ME。2012年11月的数据显示,Android占据全球智能手机操作系统市场76%的份额,在中国市场的占有率为90%。接下来将重点介绍什么是Android平台。
1.1.1 什么是Android
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。它包括一个操作系统、中间件和一些重要的应用程序。它采用软件堆层(Software Stack,又名软件叠层)的架构,主要分为三部分。底层以Linux内核工作为基础,由C语言开发,只提供基本功能;中间层包括函数库Library和Dalvik虚拟机,用C++语言开发。最上层是各种应用软件,包括通话程序、短信程序等,我们要做的,就是以Java作为编程语言编写各种各样的Android应用软件。本书中,学习Android其实就是学习怎么开发适用于在Android操作系统上运行的软件。
在国内,Android的前景十分广阔,国内很多的厂商和运营商也纷纷加入了Android阵营,同时Android应用的范围不仅仅在手机,国内一些厂家也陆续推出了采用Android系统的MID产品,比较著名的包括由Rockchip和蓝魔推出的同时具备高清播放和智能系统的音悦汇W7,可以预见,Android也将会被广泛应用在国产智能上网设备上,并将进一步扩大Android系统的应用范围。
1.1.2 Android平台的架构详解
Android平台采用一种被称为软件叠层的方式进行构建,就像一个多层蛋糕,每一层都有自己的特性和用途。这种软件结构使得层与层之间相互分离,明确各层的分工。这种分工保证了层与层之间的低耦合,当下层的层内或层下发生改变时,上层应用程序无须任何改变,图1.1为Android系统架构。

图1.1 Android系统架构
由图1.1可以很明显地看出,Android系统架构由5部分组成,分别是Applications(应用程序层)、Application Framework(应用程序框架)、Libraries(函数库)、Android Runtime (Android运行时)、Linux Kernel(Linux内核)。下面分别对这5部分进行简单介绍。
1.应用程序层
Android平台装配一个核心应用程序集合,这些程序包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。更加丰富的应用程序有待我们去开发,本书介绍的内容则是如何编写Android系统上的应用程序。
2.应用程序框架
通过提供开放的开发平台,Android使开发者能够编写极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等。
Android应用程序框架提供了大量的API供开发者使用,关于这些API的具体功能和用法则是本书后面详细介绍的内容。
所有的应用程序其实是一组服务和系统,包括:
- 视图(View)——丰富的、可扩展的视图集合,可用于构建一个应用程序,包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器。
- 内容提供者(Content Providers)——使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据。
- 资源管理器(Resource Manager)——提供访问非代码资源,如本地化字符串、图形和布局文件。
- 通知管理器(Notification Manager)——使所有的应用程序能够在状态栏显示自定义警告。
- 活动管理器(Activity Manager)——管理应用程序生命周期,提供通用的导航回退功能。
3.函数库
Android包含一套C/C++库的集合,供Android系统的各个组件使用。一般来说,Android应用开发者不直接调用这套C/C++库集,而是通过它上面的应用程序框架来调用这些库。下面为一些核心库:
- 系统C库——标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备。
- 媒体库——基于PacketVideo的OpenCORE。这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG。
- 界面管理——管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层。
- LibWebCore——新式的Web浏览器引擎,驱动Android浏览器和内嵌的Web视图。
- SGL——基本的2D图形引擎。
- 3D库——基于OpenGL ES 1.0 API的实现。库使用硬件3D加速或包含高度优化的3D软件光栅。
- FreeType——位图和矢量字体渲染。
- SQLite——所有应用程序都可以使用的强大而轻量级的关系数据库引擎。
4.Android运行时
Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在它们自己的进程中。Dalvik虚拟机设计成在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行的文件格式是.dex,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣,一般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。dx是一套工具,可以将Java.class转换成.dex格式。一个.dex文件通常会包括多个.class文件。由于.dex有时必须进行最佳化,会使文件大小增加1~4倍,并以.odex结尾。
Dalvik虚拟机依赖于Linux内核提供基本功能,如线程和底层内存管理。
5.Linux内核
Android系统建立在Linux 2.6之上,提供核心系统服务,例如,安全、内存管理、进程管理、网络堆栈、驱动模型。除此之外,Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。
如果只是做应用开发,就不需要深入了解Linux Kernel层。