news 2026/6/2 3:38:00

从Android.bp到刷机包:详解Android14中system.img、vendor.img等分区的生成路径与定制逻辑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从Android.bp到刷机包:详解Android14中system.img、vendor.img等分区的生成路径与定制逻辑

从Android.bp到刷机包:解密Android14分区镜像的生成路径与定制逻辑

当你完成mmm编译后,面对out/target/product/[device]/下错综复杂的目录结构,是否曾困惑于自己编译的模块最终会出现在哪个分区镜像?本文将带你深入Android构建系统的内部机制,揭示从源码到刷机包的全链路过程。

1. Android分区架构解析

现代Android系统采用模块化设计,将不同功能的组件划分到独立的分区中。这种设计不仅提升了系统安全性,也为设备制造商提供了灵活的定制空间。以下是Android14中主要分区的功能定位:

分区名称存储内容可定制性典型路径示例
systemAOSP核心组件、系统应用低(需签名验证)out/target/product/xxx/system/
vendorSoC厂商提供的闭源驱动和HAL中等(需厂商签名)out/target/product/xxx/vendor/
product设备系列通用功能组件out/target/product/xxx/product/
odm设备制造商定制组件最高out/target/product/xxx/vendor/odm/

提示:从Android10开始引入的动态分区(如system_ext)进一步细化了系统组件的隔离粒度,但核心逻辑仍基于这四大分区。

2. 构建系统的输出目录结构

执行完整编译后,产物目录通常呈现如下结构:

out/target/product/[device]/ ├── system/ │ ├── bin/ │ ├── lib/ │ └── etc/ ├── vendor/ │ ├── bin/ │ ├── etc/ │ └── odm/ ├── product/ │ ├── app/ │ └── overlay/ └── obj/ ├── ETAPROJECTS/ └── NOTICE_FILES/

关键目录说明:

  • system/:存放所有标记为系统模块的构建产物
  • vendor/:包含vendor:true标记的模块输出
  • product/product_specific:true模块的专属目录
  • odm/device_specific:true模块的最终位置

3. 模块到分区的映射机制

3.1 Android.bp中的分区控制

模块的最终归属由构建描述文件中的特定属性决定。以下是一个典型的模块定义示例:

cc_binary { name: "my_daemon", srcs: ["src/*.cpp"], vendor: true, // 输出到vendor分区 product_specific: true, // 覆盖vendor设置,输出到product device_specific: true, // 最高优先级,输出到odm }

属性优先级规则:

  1. device_specific:true>product_specific:true>vendor:true
  2. 无任何标记时默认进入system分区

3.2 历史遗留的Android.mk配置

对于仍使用Makefile的项目,对应的控制变量为:

LOCAL_MODULE := my_legacy LOCAL_VENDOR_MODULE := true # 等效于vendor:true LOCAL_PRODUCT_MODULE := true # 等效于product_specific LOCAL_ODM_MODULE := true # 等效于device_specific

4. 从目录到镜像的生成过程

4.1 镜像组装流程

  1. 文件收集:根据分区表定义扫描各目录
  2. 权限处理:应用fs_config规则
  3. 镜像格式化:使用make_ext4fs工具
  4. 签名验证:对关键分区进行AVB签名

4.2 定制分区布局

通过修改BoardConfig.mk可以调整分区配置:

# 示例:调整system分区大小 BOARD_SYSTEMIMAGE_PARTITION_SIZE := 2147483648 # 启用动态分区 BOARD_DYNAMIC_PARTITION_ENABLE := true

常见定制场景:

  • 扩展分区大小以适应预装应用
  • 添加自定义分区(如preload)
  • 调整文件系统类型(ext4/f2fs)

5. 高级调试技巧

当模块未出现在预期位置时,可通过以下命令追踪:

# 查看模块最终安装路径 m out/soong/.bootstrap/bin/soong_build && \ out/soong/.bootstrap/bin/soong_build --find-module my_module # 检查模块依赖关系 mmm --dump-module-info path/to/module

典型问题排查步骤:

  1. 确认模块是否被正确编译(检查obj目录)
  2. 验证分区标记是否生效
  3. 检查是否有安装冲突(如相同文件存在于多个分区)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 3:37:06

【C++】零基础入门 · 第 12 节:引用与 const 限定符

前面我们学了指针——C 中最强大也最容易出错的特性。这一节我们来学两个让代码更安全、更易读的工具:引用和 const 限定符。 1. 引用(Reference) 1.1 什么是引用? 引用是变量的「别名」——给一个已存在的变量取另一个名字。对引…

作者头像 李华
网站建设 2026/6/2 3:36:27

别再只会用timeout了!Windows批处理(.bat)文件隐藏的5个实用小技巧

解锁Windows批处理文件的隐藏潜力:5个超越timeout的高级技巧在Windows自动化任务处理中,批处理文件(.bat)常被视为简单工具,仅用于执行基础命令序列。然而,这种认知大大低估了其实际能力。许多系统管理员和…

作者头像 李华
网站建设 2026/6/2 3:34:30

2026年亲测AI论文写作软件榜单(安全合规版)

为解决学术写作中效率与合规两大核心痛点,以下精选8款高适配性AI论文写作工具(按综合优先级排序),围绕中文学术规范适配、真实参考文献生成、格式标准化、高性价比四大核心维度筛选,同时配套分场景精准选型方案与学术合…

作者头像 李华
网站建设 2026/6/2 3:34:25

专业的AI论文平台排名(2026 真实数据)

基于功能完整性、学术适配性、用户使用体验及技术稳定性,以下是当前主流AI论文写作工具的综合测评排名,按实际应用推荐指数由高至低排列,并详细标注各平台的核心优势与适用领域。🏆 第一梯队:全流程学术解决方案&#…

作者头像 李华