Aosp源码学习之目录介绍
在前面的博文中我们已经成功编译了安卓15的源码,并且成功启动了自己编译的模拟器。 那么如果你想入门成为一位android系统开发工程师,需要关注AOSP源码中的那些目录文件呢?
这期我们就简单介绍下AOSP中的目录文件及其作用。
在了解AOSP目录前我们先来看看android的官方架构图:
下面看到源码目录时你是否可以大致知道这个目录的功能大致是在那一层呢?
源码的主要目录及作用
-
art:该目录是在Android5.0中新增加的,主要是实现Android RunTime(ART)的目录,它作为Android4.4中的Dalvik虚拟机的替代,主要处理Java字节码执行。 -
bionic:Android的C库,包含了很多标准的C库函数和头文件,还有一些Android特有的函数和头文件。 -
bootablendroid程序启动导引,适合各种bootloader的通用代码,包括一个recovery目录。硬件boot层 如fastboot 如果不做硬件开发可以直接无视。 -
build:该目录包含了编译Android源代码所需要的脚本,包括makefile文件和一些构建工具。 -
compatibility:Android设备的兼容性测试套件(CTS)和兼容性实现(Compatibility Implementation)。 -
cts:Android设备兼容性测试套件(CTS),主要用来测试设备是否符合Android标准。 -
dalvik:Dalvik虚拟机,它是Android 2.3版本之前的主要虚拟机,它主要处理Java字节码执行。 系统开发基本可以无视,如果要关注,直接啃art即可。 -
developers:Android开发者文档和样例代码。 -
development:调试工具,如systrace、monkey、ddms、winscope等。 -
device:特定的Android设备的驱动程序。厂商设备定制等等。 -
external:第三方库,如WebKit、OpenGL等。 -
frameworks:Android应用程序调用底层服务的API。应用程序框架,Android系统核心部分,由 Java 和 C++ 编写。也是工程师们打交道最多的一个目录了。12.1.framework/av/多媒体相关的native层源码目录12.2.framework/base/一些基础库代码,各种解析类、工具类都在这个里面12.3.ramework/native/power、surface、input、binder等服务的native层实现源码目录12.4.framework/opt/一些基础软件,如:日历、网络、蓝牙 -
hardware:Android设备硬件相关的驱动代码,如摄像头驱动、蓝牙驱动等。 -
kernel:Android系统内核的源代码,它是Android系统的核心部分。 -
libcore:Android底层库,它提供了一些基本的API,如文件系统操作、网络操作等。 -
libnativehelperAndroid动态库,实现JNI库的基础 -
packages:Android系统中的系统应用程序的源码,例如设置、桌面、短信、电话、浏览器、相机等 -
pdk:Android平台开发套件,它包含了一些工具和API,以便开发者快速开发Android应用程序。 -
platform_testing:测试工具,用于测试Android平台的稳定性和性能。 -
prebuilts:预先编译的文件,如编译工具、驱动程序等。 -
sdk:Android SDK的源代码,Android SDK的API文档、代码示例、工具等。 -
system:Android系统的核心部分,如系统服务、应用程序、内存管理机制、文件系统、网络协议等。 -
test:测试代码,用于测试Android系统的各个组件。 -
toolchain:编译器和工具链,如GCC、Clang等,用于编译Android源代码。 -
tools:开发工具,如Android SDK工具、Android Studio、Eclipse等。
作为初学者,在上述目录中,并不需要全部记下,只需要记住几个重点即可,例如art、framework、libcore、system、build。 在实践时,为了实现功能,查阅翻读源码时,就会不断加深你对这些目录划分的了解。
编译成果输出文件
-
out/这个是编译产物的输出目录,所有的产物都可以在这个目录中找到。1.1.out/host/主机端工具,包括adb、fastboot、aapt等相关工具, 这些工具在开发主机上直接运行,用于调试和打包。1.2.out/target/具体设备的编译输出目录。以下所有内容均位于此目录下:1.2.1.product/<设备名>/system/system 分区的内容,包含系统核心框架、应用和库。最终打包为system.img。1.2.2.product/<设备名>/vendor/vendor 分区的内容,存放厂商私有驱动和 HAL 实现。最终打包为vendor.img。1.2.3.product/<设备名>/product/product 分区的内容,存放产品特定配置和应用。1.2.4.product/<设备名>/root/模拟 root 目录,最终会打包进 boot.img 的 ramdisk。1.2.5.product/<设备名>/symbols/s包含带调试符号的库和可执行文件,用于 gdb 调试。1.2.6.product/<设备名>/*.img最终生成的、可以刷写的镜像文件。
安卓作为一个庞大的系统,对于AOSP的学习,必定是一个实践性很强的过程,我们必须是一步一步地实践起来,不断地踩坑,不断地填坑才能入门。
山高路远,我们要量力而行,一步一蹒跚,才能走得更远。
关注我,一起进步,人生不止coding!!!
夜雨聆风