当前位置: 首页 > news >正文

AOSP 目录及其作用

一. 主要目录结构及其作用

目录路径主要作用描述代表性内容
art/Android Runtime的源码。负责AOT/JIT编译、垃圾回收(GC)等Dex2oat工具, Runtime库
bionic/Android自定义的C库(libc)、动态链接器(linker)等。替代了GNU的glibclibc.solibm.solibdl.solinker
bootable/启动相关的代码recovery/ (恢复模式),bootloader/ (引导加载程序参考实现)
build/构建系统的核心。包含各种Makefile、Shell脚本、Python工具(如soong)。定义编译规则和流程core/ (主Makefile), soong/ (新的构建系统)
cts/Compatibility Test Suite (兼容性测试套件)。用于确保设备兼容Android生态系统大量测试用例
dalvik/旧版Dalvik虚拟机的源码(现已基本被ART取代)
developers/示例代码和工具
device/设备专用代码和配置。这是定制化最关键的目录,通常按<厂商>/<设备>存放google/coral (Pixel 4), generic/common (模拟器)。包含BoardConfig.mk*.mksepolicyinit.rc等。
external/大量的第三方开源项目。Android系统集成了众多优秀开源库openssl/sqlite/skia/ (2D图形库), v8/ (JavaScript引擎)
frameworks/Android Framework的核心,提供应用开发所需的所有API和服务
frameworks/base/最核心的Framework。AMS, WMS, PMS等系统服务,以及所有@hide的API都在这里core/services/native/ (SurfaceFlinger等)
frameworks/av/音视频相关框架services/ (AudioFlinger, MediaPlayerService)
frameworks/native/本地系统服务、图形库等opengl/ (GL ES), vulkan/services/ (SurfaceFlinger)
frameworks/rs/RenderScript计算框架
hardware/硬件抽象层(HAL)的接口定义和实现。是连接Android系统和高通/MTK等厂商驱动代码的桥梁interfaces/ (HIDL定义), libhardware/ (旧版HAL), qcom/broadcom/等厂商实现
kernel/存放内核源码的占位符。通常是一个指向具体内核版本的软链接。实际内核源码需要单独下载
libcore/Java API的核心库实现ojluni/ (OpenJDK的改编), dalvik/ (部分遗留), json/
out/编译输出目录。所有编译生成的临时文件和最终镜像都在这里。此目录不在版本控制中,由编译系统创建
packages/系统自带的应用程序和核心内容提供者
packages/apps/系统AppSettings/Launcher3/Dialer/SystemUI/
packages/providers/系统ContentProviderCalendarProvider/ContactsProvider/
packages/services/系统ServiceTelephony/Car/
prebuilts/预编译好的工具和库,为了加速编译过程gcc/ (交叉编译工具链), clang/ (Android主编译器), ndk/sdk/
sdk/Software Development Kit的相关工具
system/一些核心的系统工具和守护进程
system/core/系统核心工具和库init (第一个用户进程), adb/logcat/libcutils/ (工具库)
system/sepolicy/SELinux安全策略文件。定义所有进程和文件的访问权限,对系统安全至关重要
system/vold/Volume Daemon,负责磁盘管理和挂载
system/extras/额外的系统工具和测试程序
vendor/厂商专用软件和配置。类似于device/,但更侧重于软件闭源部分。Google、三星、华为等会在这里放置私有代码google/ (Google Apps), qcom/ (高通相关)
makefile构建系统的入口点

二. 编译成果物及存放位置

编译完成后,所有产出都在 out/ 目录下。其结构如下:

  1. out/host/
    ○ 内容:在开发主机(你的电脑) 上运行的工具和库
    ○ 子目录
    ● linux-x86/ (在Linux系统下):包含最终生成的主机工具:
    如 adbfastbootaaptsignapk.jar 等
    ○ 用途:这些工具用于后续的打包、签名、刷机等操作
  2. out/target/
    ○ 内容:用于目标设备(车机) 的所有东西
    ○ 关键子目录
    ● product/:按产品划分的输出
    ● <product_name>/ (如 generic_car_arm64/):这是最核心的目录
    ● obj/:编译过程中产生的中间对象文件(.o)和模块目标(如 APPSJAVA_LIBRARIESETC
    ● system/模拟 Android 设备上的 /system 分区结构。包含系统镜像的原始文件
    ● system/app/:系统App(APK)
    ● system/bin/:系统二进制可执行文件(如 surfaceflingervold
    ● system/lib/system/lib64/:系统库(.so文件)
    ● system/framework/:Java框架JAR包(framework.jarservices.jar等)
    ● system/build.prop:系统属性文件
    ● vendor/:模拟 /vendor 分区结构,存放厂商相关文件
    ● root/:模拟 root 目录,最终会打包进 boot.img 的 ramdisk
    ● symbols/:包含带调试符号的库和可执行文件,用于 gdb 调试
    ● *.img最终生成的、可以刷写的镜像文件(见第三部分)

三. 最终烧录镜像的文件格式

编译最终会生成多个 .img 文件,这些就是通过 fastboot 或其他刷机工具烧录到车机eMMC存储芯片各分区的镜像。它们通常是 sparse 格式(一种压缩格式,fastboot 可以识别)或 raw 格式(ext4

镜像文件名对应分区文件系统格式内容描述来源目录
boot.imgboot特殊格式内核和初始内存磁盘(ramdisk)。包含Linux Kernel、设备树(dtb)和启动到init进程所需的初始根文件系统out/target/product/<name>/root + 内核
vendor.imgvendorext4 / erofs厂商专用软件和HAL。包含设备制造商提供的硬件抽象层(HAL)库、固件、闭源驱动等out/target/product/<name>/vendor/
system.imgsystemext4 / erofs只读的Android系统核心。包含Framework、系统服务、原生App(Settings, Launcher等)。A/B分区中为system_a/imgout/target/product/<name>/system/
system_ext.imgsystem_extext4 / erofs系统扩展。存放一些不属于核心Android但又是系统级别的应用和库out/target/product/<name>/system_ext/
product.imgproductext4 / erofs产品特定配置。用于存放与特定产品(如车机、电视)形态强相关的应用和配置out/target/product/<name>/product/
vbmeta.imgvbmeta特殊格式验证启动元数据。包含用于验证其他分区完整性的哈希值和描述符,是Android Verified Boot (AVB) 的核心avbtool生成
dtbo.imgdtbo特殊格式设备树叠加层。用于在不重新编译内核的情况下,对基础设备树进行修改(如配置GPIO引脚),常见于Project Treble设备由设备树源文件(.dts)编译而来
super.imgsuper特殊格式动态分区容器。在支持动态分区的设备上,systemvendorproduct等镜像会被打包成一个super.img再进行刷写lpmake工具将上述多个img打包而成
userdata.imguserdataext4 / f2fs用户数据分区。包含用户安装的应用、设置、媒体文件等。首次刷机时通常是空的或包含最小数据out/target/product/<name>/data/
cache.imgcacheext4缓存分区。用于系统更新下载和临时文件。现在作用已减小,很多设备可能不再需要空分区或极小分区
recovery.imgrecovery特殊格式恢复模式分区。包含一个最小的Linux系统,用于系统恢复、清除数据、刷入OTA更新包等。其结构与boot.img类似out/target/product/<name>/recovery/root

总结与流程

  1. 源码 (aosp/): 你编写的代码和配置(C++JavaAndroid.bp.mk.rc.xml
  2. 编译 (out/): 构建系统将源码编译、链接、打包成主机工具和目标文件(.so.jar.apk.bin),并按照分区结构组织在 out/target/product/<name>/system/ 等目录下
  3. 打包 (*.img): 构建系统使用 make_ext4fslpmakeavbtool 等工具,将组织好的文件打包成对应分区的镜像文件(system.imgvendor.imgsuper.img 等)
  4. 烧录: 通过 fastboot flash boot boot.imgfastboot flash super super.img 等命令,或将镜像文件打包成OTA包,将这些 img 文件烧写到车机的对应分区中,完成系统部署
http://www.xdnf.cn/news/1421749.html

相关文章:

  • Minecraft(我的世界)服务器信息查询免费API接口详解
  • golang 14并发编程
  • 轻量实现 OCPP 1.6 JSON 协议(欧洲版)的充电桩调试平台
  • Google Gemini 2.5 Flash Image(Nano-Banana)震撼登场!人人都能免费用的AI修图神器!
  • SQL执行过程及原理详解
  • AI + 机器人:当大语言模型赋予机械 “思考能力”,未来工厂将迎来怎样变革?
  • 三、SVN实践练习指南
  • 轻量级注意力模型HOTSPOT-YOLO:无人机光伏热异常检测新SOTA,mAP高达90.8%
  • Swift 解法详解:LeetCode 368《最大整除子集》
  • 【牛客JZ31】—栈的压入弹出序列判断算法详解
  • FPGA中的亚稳态与跨时钟域数据撕裂现象
  • 眼底病害图像分类数据集
  • MYSQL速通(4/5)
  • KL Loss
  • Python OpenCV图像处理与深度学习:Python OpenCV图像滤波入门
  • [系统架构设计师]论文(二十三)
  • 基于SpringBoot+MYSQL开发的师生成果管理系统
  • 美术馆预约小程序|基于微信小程序的美术馆预约平台设计与实现(源码+数据库+文档)
  • zotero.sqlite已损坏
  • 第9篇:监控与运维 - 集成Actuator健康检查
  • 『C++成长记』vector模拟实现
  • 车载总线架构 --- 车载LIN总线传输层概述
  • 百胜软件获邀出席第七届中国智慧零售大会,智能中台助力品牌零售数智变革
  • C++ 虚继承:破解菱形继承的“双亲困境”
  • 【macOS】垃圾箱中文件无法清理的--特殊方法
  • Linux | 走进网络世界:MAC、IP 与通信的那些事
  • PyTorch 实战(3)—— PyTorch vs. TensorFlow:深度学习框架的王者之争
  • mysql中如何解析某个字段是否是中文
  • 攻防演练笔记
  • Frida Hook API 转换/显示堆栈