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

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 接口和服务
http://www.xdnf.cn/news/9683.html

相关文章:

  • 涨薪技术|0到1学会性能测试第88课-Web_service_call函数
  • Spring AI Alibaba 发布企业级 MCP 分布式部署方案
  • LeetCode 169:多数元素 - 摩尔投票法的精妙解法
  • 【freertos-kernel】queue(发送)
  • # Python 语音助手本地的ollama实现
  • nt!MmMapViewInSystemCache函数分析PointerPte的填充
  • AD/DA HAL库API
  • 内容中台的构建基础是什么?
  • King3399(ubuntu文件系统)iic(i2c)功能测试
  • MP4视频文件播放Demo(附源码)
  • 头歌之动手学人工智能-Pytorch 之autograd
  • 算法 Arrays.sort()函数自定义排序(Comparator 接口)
  • [网页五子棋][匹配模块]服务器开发、用户管理器(创建匹配请求/响应对象、处理连接成功、处理下线)
  • 根据jvm源码剖析类加载机制
  • Python爬虫实战:研究Tornado框架相关技术
  • [Vue组件]半环进度显示器
  • 小猴子摆玩具
  • 计算机网络第一章计算机网络概述(竟成)
  • 小白成长之路-Linux操作系统-进程管理
  • 【机器人编程基础】python中的常用数据类型
  • ElasticSearch查询指定时间内出现的次数/2秒内出现的次数
  • 我们来学mysql -- 输出一份“数据备份还原”sh脚本
  • 手写字魔法消除1:数据集说明(含下载链接)
  • Kruskal算法剖析与py/cpp/Java语言实现
  • linux中基础IO(上)
  • 浅谈 JavaScript 性能优化
  • 深度解析 Nginx 配置:从性能优化到 HTTPS 安全实践
  • YOLOv8性能提升:引入华为GhostNetv1特征提取网络
  • 第五章 宽松内存一致性模型 A Primer on Memory Consistency and Cache Coherence - 2nd Edition
  • Houdini learning Record