[笔记分享] [Android] Android系统开发

来源:互联网 发布:国家外汇管理局 知乎 编辑:程序博客网 时间:2024/05/21 19:32

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下,原始工程不会改动。结构如下:

这里写图片描述