第三章 认识系统组件

3.1 源码结构介绍

在上一章的学习中我们成功编译了Android12以及对应的内核并且通过多种方式刷入手机。接下来我们需要先对Android源码的根结构有一定的了解对结构有一定了解能帮助我们更快的定位和分析源码同时能让开发人员更好的理解Android系统。

Android源码结构分为四个主要的模块frameworks、packages、hardware、system。frameworks模块是Android系统的核心包含了Android系统的核心类库、Java框架和服务它是Android开发的基础。packages模块包括了Android系统的应用程序主要是用户使用的应用程序例如通讯录、日历和相机。hardware模块提供了对硬件设备的支持例如触摸屏、摄像头等。最后system模块包含了Linux内核和Android底层服务它负责管理资源和处理系统事件。除了这些主要模块Android源码中还有一些其他的文件夹例如build、external、prebuilts和tools等他们提供了编译系统所需的资源和工具。接下来我们对根目录进行一个简单的介绍。

1、art该目录是Android 5.0中新增加的主要是实现Android RunTimeART的目录它作为Android 4.4中的Dalvik虚拟机的替代主要处理Java字节码。

2、bionic这是Android的C库包含了很多标准的C库函数和头文件还有一些Android特有的函数和头文件。

3、bootable该目录包含了引导程序这些引导程序用于从系统启动并初始化硬件 例如Bootloader和Recovery程序。

4、build该目录包含了编译Android源代码所需要的脚本包括makefile文件和一些构建工具。

5、compatibility该目录收集了Android设备的兼容性测试套件CTS和兼容性实现Compatibility Implementation

6、cts该目录包含了Android设备兼容性测试套件CTS主要用来测试设备是否符合Android标准。

7、dalvik该目录包含了Dalvik虚拟机它是Android 2.3版本之前的主要虚拟机它主要处理Java字节码。

8、developers该目录包含了Android开发者文档和样例代码。

9、development该目录包含了一些调试工具如systrace、monkey、ddms等。

10、device该目录包含了特定的Android设备的驱动程序。

11、external该目录包含了一些第三方库如WebKit、OpenGL等。

12、frameworks该目录提供了Android应用程序调用底层服务的API它也是Android应用程序开发的重要组成部分。

13、hardware该目录包含了Android设备硬件相关的驱动代码如摄像头驱动、蓝牙驱动等。

14、kernel该目录包含了Android系统内核的源代码它是Android系统的核心部分。

15、libcore该目录包含了Android底层库它提供了一些基本的API如文件系统操作、网络操作等。

16、libnativehelper该目录提供了一些C++库,它们可以帮助我们调用本地代码。

17、packages该目录包含了Android框架、应用程序和其他模块的源代码。 包含了 Android 系统中的所有应用程序,例如短信、电话、浏览器、相机等

18、pdk该目录是一个Android平台开发套件它包含了一些工具和API以便开发者快速开发Android应用程序。

19、platform_testing该目录包含了一些测试工具用于测试Android平台的稳定性和性能。

20、prebuilts该目录包含了一些预先编译的文件如编译工具、驱动程序等。

21、sdk该目录是Android SDK的源代码它包含了Android SDK的API文档、代码示例、工具等。

22、system该目录包含了Android系统的核心部分如系统服务、应用程序、内存管理机制、文件系统、网络协议等。

23、test该目录包含了一些测试代码用于测试Android系统的各个组件。

24、toolchain该目录包含了一些编译器和工具链如GCC、Clang等用于编译Android源代码。

25、tools该目录包含了一些开发工具如Android SDK工具、Android Studio、Eclipse等。

26、vendor该目录包含了一些硬件厂商提供的驱动程序如摄像头驱动、蓝牙驱动等。

我们并不需要全部记下,只要大致的有个印象,当你常常为了实现某个功能,查阅翻读源码时,就会不断加深你对这些目录划分的了解,这里我们回顾一下第二章中,在我们编译源码的过程中下载了两个驱动相关的文件。回顾下图。

image-20230219161123065

下载两个驱动文件后我们将文件放到源码根目录中解压并且执行相应的sh脚本进行导出到了这里我们了解到vendor中是硬件厂商提供的摄像头蓝牙之类的驱动程序。那么我们就可以观察到脚本执行后实际就是将驱动文件放到了对应目录中。