Framework学习_1系统编译流程
AOSP 构建系统解析: AndroidProducts.mk 的识别与加载机制
在 Android 构建系统中,AndroidProducts.mk 是定义设备配置的核心文件。本文将详细解析其如何通过 环境初始化 和 宏函数解析 被系统识别并加载。
1. 构建环境初始化阶段
执行 envsetup.sh 脚本
当运行以下命令时:
source build/envsetup.sh构建系统会执行以下操作:
扫描关键目录
递归搜索device/、vendor/等目录下的所有子目录,寻找并执行其中的vendorsetup.sh文件。解析
AndroidProducts.mk文件
通过以下核心宏函数完成文件定位和变量提取:宏函数名称 功能描述 _find-android-products-files递归搜索 device/、vendor/和build/target/product/目录,定位所有AndroidProducts.mk文件get-all-product-makefiles读取每个 AndroidProducts.mk中的PRODUCT_MAKEFILES变量,收集所有产品配置文件路径get-product-makefiles根据用户选择的 TARGET_PRODUCT,从PRODUCT_MAKEFILES中筛选对应的产品配置文件
2. 构建配置选择阶段
执行 lunch 命令
当运行以下命令时:
lunch aosp_marlin-userdebug构建系统会执行以下关键步骤:
解析产品组合列表
从AndroidProducts.mk中读取COMMON_LUNCH_CHOICES变量,该变量定义了所有可用的产品组合,例如:# <product_name>-<build_variant> COMMON_LUNCH_CHOICES := \ aosp_marlin-userdebug \ aosp_sailfish-eng拆分产品名称
将用户输入的产品名称(如aosp_marlin-userdebug)拆分为:TARGET_PRODUCT:设备标识(aosp_marlin)TARGET_BUILD_VARIANT:构建类型(userdebug)
定位产品配置文件
根据TARGET_PRODUCT,在AndroidProducts.mk中找到对应的PRODUCT_MAKEFILES变量,该变量指向实际的产品配置文件路径,例如:PRODUCT_MAKEFILES := \ $(LOCAL_DIR)/aosp_marlin.mk
总结
AOSP 构建系统通过以下机制实现 AndroidProducts.mk 的动态加载:
- 环境初始化阶段:通过
envsetup.sh扫描目录并解析宏函数 - 配置选择阶段:通过
lunch命令解析产品组合并定位具体配置
这种设计使得 Android 构建系统能够灵活支持多设备、多版本的构建需求。
Framework学习_1系统编译流程
https://newbieeming.github.io/2026/02/28/Framework学习_1系统编译流程/