从图中可以看出Android分为4层,从高到低分别是应用层、应用框架层、系统运行库层和Linux内核层。下面将对这4层进行简要的分析和介绍。
1. 应用层
应用是Java语言编写的运行在虚拟机上的程序,如上图中最上层部分所示。
我们要开发的程序就是运行在此层。
2. 应用框架层
此层是Google提供的API框架,我们可以使用这些框架来开发自己的应用。
我们可以理解为Windows API。
Android提供如下组件。
² 视图系统:包括列表(List)、网格(Grid)、文本框(Text Box)、按钮(Button),以及可以嵌入的Web浏览器。
² 内容提供器(Content Providers):提供类似Windows IPC功能。
² 资源管理器(Resource Manager):提供非代码资源的访问,如本地字符串、图形和布局文件(Layout file)。
² 通知管理器(Notification Manager):应用可以在状态栏中显示自定义的提示信息。相当于Windows中的Message服务。
² 活动管理器(Activity Manager):用来管理应用程序生命周期并提供常用的导航退回功能。
² 窗口管理器(Window Manager):管理所有的窗口程序。类似Windows的explorer功能。
² 包管理器(Package Manager):Android系统内的程序管理
3. 系统运行库(C/C++库以及Android运行库)层
² Bionic系统C库:C语言标准库,系统最底层的库,C库通过Linux系统来调用。
² 多媒体库(MediaFramework):Android系统多媒体库,基于PacketVideo OpenCORE,该库支持多种常见格式的音频、视频的回放和录制,以及图片,比如MPEG4、MP3、AAC、AMR、JPG、PNG等。
² SGL:2D图形引擎库。
² SSL:位于TCP/IP协议与各种应用层协议之间,为数据通信提供支持。
² OpenGL ES 1.0:3D效果的支持。
² SQLite:嵌入式的关系数据库。
² Webkit:Web浏览器引擎。
² FreeType:位图(bitmap)及矢量(vector)。
每个Java程序都运行在Dalvik虚拟机之上。
很多人认为Dalvik虚拟机是一个Java虚拟机,但是这种说法并不准确,两者并不兼容。
他们有两个明显的不同:Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式为dex(Dalvik Executable)的文件。在Java SE程序中的Java类会被编译成一个或者多个字节码文件(.class)然后打包到jar文件,而后Java虚拟机会从相应得class文件和jar文件中获取相应的字节码;Android是在编译成class文件后,还会通过一个工具(dx)将应用所有的class文件转换成一个dex文件,而后Dalvik虚拟机会从其中读取指令和数据。
Dalvik虚拟机有如下几个主要特征:
(1) 专有的dex文件格式。
为什么弃用已有的字节码文件(.class文件)而采用新的格式呢?原因如下:
Ø 每个应用中会定义很多类,编译完成后即会有很多相应的class文件,class文件中会有大量冗余信息,而dex文件格式会把所有的class文件内容整合到一个文件中。这样,除了减少整体的文件尺寸和I/O操作外,也提高了类的查找速度。
Ø 增加了对新的操作码的支持。
Ø 文件结构尽量简洁,使用等长的指令,借以提高解析速度。
Ø 尽量扩大只读结构的大小,借以提高跨进程的数据共享。
(2) dex的优化。
Ø 调整所有字段的字节序(LITTLE_ENDIAN)和对齐结构中的每一个域。
Ø 验证DEX文件中的所有类。
Ø 对一些特定的类和方法里的操作码进行优化。
(3) 基于寄存器。
相对于基于堆栈实现的虚拟机,基于寄存器实现的虚拟机在代码的执行效率上更胜一筹。
(4) 一个应用,一个虚拟机实例,一个进程。
4. Linux内核层
Android是经过量身裁减的、基于Linux2.6内核的移动设备的操作系统。
其主要的驱动如下:
Ø 显示驱动(Display Driver):基于Linux的帧缓冲(FrameBuffer)驱动。
Ø 键盘驱动(KeyBoard Driver):作为输入设备的键盘驱动。
Ø Flash内存驱动(Flash Memory Driver):基于MTD的Flash驱动程序。
Ø 照相机驱动(Camera Driver):常用的基于Linux的v412(Video for Linux)驱动。
Ø 音频驱动(Audio Driver):常用的基于ALSA(AdvancedLinux Sound Architecture)的高级Linux声音体系驱动。
Ø 蓝牙驱动(Bluetooch Driver):基于IEEE 802.15.1标准的无线传输技术。
Ø WiFi驱动:基于IEEE 802.11标准的驱动程序。
Ø Binder IPC驱动:Andriod的一个特殊的驱动程序,具有独立的设备节点,提供进程间通信的功能。
Ø Power Management(电源管理):比如电池电量等。
ü android.app
提供高层的程序模型和基本的运行环境。
ü android.content
包含对各种设备上的数据进行访问和发布。
ü android.database
通过内容提供者浏览和操作数据库
ü android.graphics
底层的图形库,包含画布、颜色过滤、点、矩形,可以将它们直接绘制到屏幕上。
ü android.location
定位和相关服务的类
ü android.media
提供一些类管理多种音频、视频的媒体接口。
ü android.net
提供帮助网络访问的类,超过通常的java.net.*接口
ü android.os
提供了系统服务、消息传输和IPC机制。
ü android.opengl
提供OpenGL的工具。
ü android.provider
提供访问Android内容提供者的类。
ü android.telephony
提供与拨打电话相关的API交互。
ü android.view
提供基础的用户界面接口框架。
ü android.util
涉及工具性的方法,例如时间日期的操作。
ü android.webkit
默认浏览器操作接口。
ü android.widget
包含各种UI元素(大部分是可见的)在应用程序的布局中使用。