Android 构建系统中常见的 .mk
文件及其作用
在 Android 构建系统中,除了 BoardConfig.mk
和 device.mk
之外,还有许多其他类型的 .mk
文件用于定义不同层级的构建配置和模块依赖。下面我将列出一些常见的、与设备构建相关的 .mk
文件及其作用。
🧱 一、常见 .mk
文件及其作用
1. AndroidProducts.mk
- 路径示例:
device/rockchip/rk3576/AndroidProducts.mk
- 作用:
- 定义可用的产品配置;
- 指定默认产品配置文件(如
PRODUCT_MAKEFILES
); - 列出可选的 lunch 目标组合(如
COMMON_LUNCH_CHOICES
)。
2. product_*.mk
- 路径示例:
device/rockchip/rk3576/product_rk3576.mk
- 作用:
- 定义特定产品的系统特性;
- 设置
PRODUCT_*
系列变量,如 PRODUCT_MODEL
, PRODUCT_BRAND
, PRODUCT_PROPERTY_OVERRIDES
等; - 可以被
device.mk
或 AndroidProducts.mk
引用。
3. vendorsetup.sh
- 路径示例:
device/rockchip/rk3576/vendorsetup.sh
- 作用:
4. Android.mk
- 路径示例:
packages/apps/Launcher3/Android.mk
- 作用:
- 定义一个模块的构建规则;
- 支持多种模块类型(如应用、库、可执行文件等);
- 使用
LOCAL_MODULE_TAGS
, LOCAL_SRC_FILES
, LOCAL_PACKAGE_NAME
等变量定义模块属性。
5. prebuild.mk
- 路径示例:
device/rockchip/common/prebuild.mk
- 作用:
- 定义预编译资源或模块;
- 控制哪些模块在构建前就准备好(如 vendor 预编译二进制文件);
- 常用于厂商闭源模块的集成。
6. init.*.rc
- 路径示例:
device/rockchip/rk3576/init.rk3576.rc
- 作用:
- 定义系统启动时的服务和初始化动作;
- 包括挂载分区、启动服务、设置权限等;
- 是 Android 启动流程的重要组成部分。
7. fstab.*
- 路径示例:
device/rockchip/rk3576/fstab.rk3576
- 作用:
- 定义设备的文件系统挂载表;
- 指定各分区的挂载点、文件系统类型、挂载选项等;
- 在 init 进程启动时使用。
8. ueventd.*.rc
- 路径示例:
device/rockchip/rk3576/ueventd.rk3576.rc
- 作用:
- 定义设备节点的权限;
- 控制
/dev
下设备文件的创建和权限设置; - 对 USB 设备、GPU 等硬件权限控制非常关键。
9. media_profiles.xml / media_codecs.xml
- 路径示例:
device/rockchip/rk3576/media_profiles.xml
- 作用:
- 定义设备支持的音视频编码器/解码器;
- 影响系统对多媒体格式的支持情况;
- 是 Android 多媒体框架的一部分。
10. manifest.xml / device_manifest.xml
- 路径示例:
device/rockchip/rk3576/device_manifest.xml
- 作用:
- 定义设备的 HAL 接口和服务声明;
- 是 Treble 架构下必备的配置文件;
- 用于运行时加载 HIDL 或 AIDL 接口。
📁 二、按功能分类的 .mk
文件列表
类型 | 文件名 | 用途 |
---|
产品配置 | AndroidProducts.mk , product_*.mk | 定义产品线、lunch 目标、默认模块 |
设备通用配置 | device.mk | 定义通用模块、系统应用、资源复制 |
主板级配置 | BoardConfig.mk | 定义硬件参数、分区大小、内核选项 |
厂商私有配置 | vendorsetup.sh , prebuild.mk | 添加 lunch 目标、预编译模块 |
模块定义 | Android.mk | 定义具体模块(应用、库、可执行文件) |
系统行为配置 | init.*.rc , fstab.* | 控制启动流程、文件系统挂载 |
权限管理 | ueventd.*.rc | 控制设备节点权限 |
多媒体配置 | media_profiles.xml , media_codecs.xml | 定义音视频编码能力 |
Treble/HAL 配置 | manifest.xml , device_manifest.xml | 定义 HAL 接口和服务 |
🔄 三、典型调用关系图解
lunch rk3576_u-userdebug -->
m -->
加载 build/make/core/config.mk -->
包含 BoardConfig.mk -->
设置硬件相关变量
加载 AndroidProducts.mk -->
包含 device.mk -->
设置模块依赖、系统特性等
加载 prebuild.mk -->
设置预编译模块
加载 Android.mk -->
构建各个模块
加载 init.*.rc, ueventd.*.rc -->
控制系统启动行为和设备权限
✅ 四、总结对比表
文件名 | 所属层级 | 主要作用 |
---|
AndroidProducts.mk | 产品级 | 定义 lunch 目标、产品配置文件 |
device.mk | 产品级 | 定义模块依赖、系统特性 |
BoardConfig.mk | 板级 | 定义硬件参数、分区大小、内核选项 |
Android.mk | 模块级 | 定义单个模块的构建规则 |
vendorsetup.sh | 产品级 | 添加 lunch 目标 |
prebuild.mk | 产品级 | 定义预编译模块 |
init.*.rc | 系统级 | 控制系统启动行为 |
fstab.* | 系统级 | 定义文件系统挂载表 |
ueventd.*.rc | 系统级 | 控制设备节点权限 |
media_profiles.xml | 系统级 | 定义多媒体编码能力 |
manifest.xml | Treble | 定义 HAL 接口和服务 |