2.1 系统架构
正如上一篇所述的总体架构图:
系统从下至上可分4层:
1. Linux操作系统及驱动层
2. 本地代码框架和JAVA运行环境层
3. JAVA框架层
4. JAVA应用程序层
1由c实现,2由C/C++实现,3和4主要Java实现。1和2之间像内核和用户空间。2和3之间是本地代码和JAVA代码层接口,3和4是Android系统API接口。
a) Linux操作系统及驱动
Android基于2.6内核,除此之外,还增加了下面驱动程序,如Binder IPC驱动、显示驱动、音频系统驱动、摄像头驱动、蓝牙驱动、wifi驱动、输入设备驱动、电源管理等。
b) Android程序库
包括一些C/C++库:
1. 系统C库。Libc。
2. 多媒体库。基于packetVideo的OpenCore。
3. SurfaceManger。显示子系统管理器。
4. SGL。Skia图形库。
5. LibWebCore。最新的Web浏览器引擎。
6. FreeType。位图和矢量字体显示。
7. 3D:基于OpenGL ES 1.0 API实现。
c) Android运行环境
包括Dalvik Java虚拟机和Java类库。Dalvik是Android中的java虚拟机,每个Android应用程序拥有一个独立的Dalvik实例。Dalvik执行文件扩展名为.dex,基于寄存器实现,所有的类都由java编译器编译,然后通过“dx”工具转换成dex格式由虚拟机运行。另外,Dalvik依赖于Linux某些功能,如线程机制和底层内存管理机制。
对于android应用部分就不做介绍了。
除了软件之外,Android还提供一系列工具来辅助开发,有aapt、adb、dx、Dalvik、emulator、monkey等。
2.2 源代码结构
Android代码工程分3部分:
1. 核心工程。在根目录的各个文件夹中。
2. 扩展工程。使用其他开源项目扩展的功能,在externel文件夹中。
3. 包。提供Android应用程序和服务,在package文件夹中。
a) 核心工程
包含了对Android系统基本运行的支持,目录说明如下:
b)扩展工程。
这些是经过修改后使用Android工程,有些在主机上运行,而有些在目标机上运行。目录说明如下:
c)包
Android的Java程序包是第4层次的内容,包括应用程序和内容提供器,还有输入法部分。
2.3 编译
Linux编译直接make就可以了。它会递归找到各目录的android.mk文件。另外,Android的内核是单独编译的,方法和标准Linux编译是一样的。编译结果包括:
1. 主机工具
2. 目标机程序
3. 目标机映像文件
4. 目标机Linux内核
编译出来的文件都放在了根目录的/out下,原始工程不会改动。结构如下: