首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >在 Android 编译系统里,lunch 到底是干嘛的?

在 Android 编译系统里,lunch 到底是干嘛的?

原创
作者头像
用户10171634
发布2025-10-17 13:45:44
发布2025-10-17 13:45:44
1600
举报

在脚本中,lunch $MTK_SYS_PROJ $_SYS_PROJ(如 lunch -userdebug A122 )用于:

  • 第一个参数:设置 MTK 核心 system 环境(通用配置,如架构、版本)。
  • 第二个参数:叠加 OEM 定制(项目,如特定产品功能、overlay 配置)。

lunch 这个函数的定义是在 split_build 脚本里定义的 还是在 envsetup里定义的?

在 Android 编译系统里,lunch 并不是普通的 shell 命令,而是 一个 shell 函数,它的定义来源和加载过程如下:


1️⃣ 定义位置

  • lunch 函数 不是在 split_build 里定义的
  • 它是 envsetup.sh 脚本里定义的,或者更准确地说,是由 envsetup.sh 加载的其他脚本定义的。

在典型 AOSP/MTK 编译环境中:

代码语言:javascript
复制
build/envsetup.sh

里面会有一行类似:

代码语言:javascript
复制
lunch() {
    ...
}

或者它会 source 其他脚本,例如:

代码语言:javascript
复制
source build/core/envsetup.mk

但本质上,你 source build/envsetup.sh 后,就会得到 lunch 命令。


2️⃣ 作用

lunch 的作用是:

  1. 设置 环境变量
    • TARGET_PRODUCT
    • TARGET_BUILD_VARIANT
    • TARGET_BUILD_TYPE
  2. 根据选择的 device/product 自动加载对应的 BoardConfig.mkdevice.mk 等配置文件。
  3. 让后续的 makem 命令知道要编译哪个 product 和 variant。

3️⃣ 使用方式

当你在终端执行:

代码语言:javascript
复制
source build/envsetup.sh
lunch sys MMI
  • envsetup.sh 已经定义了 lunch 函数
  • lunch 会解析 sys(product+variant)和 MMI(device)
  • 设置好环境变量,然后你可以直接执行 mmake 编译对应镜像

结论

  • lunchenvsetup.sh 里定义的 shell 函数,不是 split_build 脚本。
  • split_build 只是某些 MTK 自定义的构建脚本,用于分区或增量编译,跟 lunch 的定义无关。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1️⃣ 定义位置
  • 2️⃣ 作用
  • 3️⃣ 使用方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档