Android系统的底层建立在Linux之上,该平台由操作系统、中间件、用户界面和应用软件4层组成,它采用一种被称为软件层叠(Software Stack)的方式进行构建。这种软件层叠结构是的层于层之间相互隔离,明确各层之间的分工。这种分工保证了层与层之间的低耦合,当下层的层内或层下发生改变时,上层的应用层序无需任何改变。
Android系统主要由5部分组成,下面分别对这5部分简单介绍。
1.应用程序层
Android系统将会包含一系列的核心应用程序,包括电子邮件客户,SMS程序,日历,地图,浏览器,联系人等。这些程序通常是由java语言编写的。这也是本书所介绍的主要内容:编写android系统上的应用程序。
2.应用程序框架
当我们开发android应用程序时,就是面向底层的应用程序框进行的。从这个意义上来看,Android系统上的应用程序是完全平等的,不管是Android系统提供的程序,还是开发者提供的程序,都可以访问Android系统提供的API框架。
Android应用程序框架提供了大量API供开发者使用,关于这些API的具体功能和用法则是本书后面要详细介绍的内容,此处不再展开阐述。
应用程序框架除了可作为应用程序开发的基础外,也是软件复用的重要手段,任何一个应用程序都可发布他的功能模块——只要发布时遵守了框架的约定,那么其他应用程序就可以使用这个功能模块。
3.函数库
Android包含一套被不同组件所使用的C/C++库的集合。一般来说,Android应用开发者不能直接调用这套C/C++库集,但是可以通过它上面的应用程序框架来调用这些库。
下面列出一些核心库。
->系统C库:一个从BSD系统中派生出来的标准C系统库(libc),并且专门为嵌入式Linux设备调整过。
->媒体库:基于PacketVideo的OpenCORE,这套媒体库支持播放和录制很多流行音频和视频格式,以及查看静态图片。主要包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等多媒体格式。
->Surface Manage:管理对显示子系统的访问,并可以对多个应用程序的2D和3D图层提供无缝整合。
->LibWebcore :一个全新的Wen浏览器引擎,该引擎为Android浏览器提供支持,也为WebView提供支持,WebView可以完全嵌入开发者自己的应用程序中。本书后面会有关于WebView的介绍。
->SGL:底层的2D图形引擎。
->3D libraries:基于OpenGL ES API实现的3D系统,这套3D库既可使用硬件3D加速(如果硬件系统支持),也可使用高度优化的软件3D加速。
->FreeType:位图和向量字体显示。
4.Android运行时
Android运行时由两部分组成:Android核心库集和ART。其中核心库集提供了Java语言核心库所能使用的绝大部分功能,而虚拟机则负责运行Android应用程序。
Android5.0以前的Android运行时由Dalvik虚拟机和Android核心库集组成,但由于Dalvik虚拟机采用了一种被称为JIT(Just-in-time)的解释器进行动态编译并执行,因此导致AndroidApp运行时比较慢;而ART模式则是在用户安装App时进行预编译(Ahead-of-time,简称AOT)的,将原本在程序运行时的编译动作提前到应用安装时,这样可以使得程序在运行时可以减少动态编译的开销,从而提高Android App的运行效率。
反过来,由于ART需要在安装App时进行AOT处理,因此ART需要占用更多的存储空间,应用安装和系统启动后时间会延长不少。
反过来,由于ART需要在安装APP时进行AOT处理,因此ART需要更多的存储空间,应用安装和系统启动时间会延长不少。
除此之外,ART还支持ARM,x86和MIPS架构,并且能完全兼容64位系统,Android5.0必然会带来更好的用户体验。
5.Linux内核
Android系统建立在Libux2.6之上。Linux内核提供了安全性,内存管理,进程管理,网络协议栈和驱动模型等核心系统服务。除此之外,Linux内核也是系统硬件和软件叠层之间的抽象层。