Android 构建系统中常见的 .mk 文件及其作用


Android 构建系统中常见的 .mk 文件及其作用

在 Android 构建系统中,除了 BoardConfig.mkdevice.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.mkAndroidProducts.mk 引用。

3. vendorsetup.sh

  • 路径示例device/rockchip/rk3576/vendorsetup.sh
  • 作用
    • 添加自定义设备到 lunch 菜单;
    • 示例内容:
      add_lunch_combo rk3576_u-userdebug
      

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.xmlTreble定义 HAL 接口和服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值