一、android build system编译系统概述
二、envsetup.sh脚本(Android10)
三、soong_ui.bash脚本
四、soong_ui的main.go
五、kati中调用main.mk
六、make目录中的main.mk
七、AndroidProducts.mk
八、module-info.json
九、子模块的执行
文章目录
1. add_lunch_combo函数被废弃
所谓的lunch-combo指的是大家每次lunch时,打印出来的,可供选择的lunch选项。
旧版本的Android,使用此函数来添加lunch-combo
新版本的Android,执行此函数时会提醒add_lunch_combo is obsolete,告知此命令已经废弃。
并提醒开发者Use COMMON_LUNCH_CHOICES in your AndroidProducts.mk instead.
采用COMMON_LUNCH_CHOICES变量,在AndroidProducts.mk文件中声明lunch-combo
function add_lunch_combo()
{
if [ -n "$ZSH_VERSION" ]; then
echo -n "${funcfiletrace[1]}: "
else
echo -n "${BASH_SOURCE[1]}:${BASH_LINENO[0]}: "
fi
echo "add_lunch_combo is obsolete. Use COMMON_LUNCH_CHOICES in your AndroidProducts.mk instead."
}
2. print_lunch_menu函数
打印出全部的lunch-combo
具体是通过调用get_build_var函数来获得
function print_lunch_menu()
{
local uname=$(uname)
echo
echo "You're building on" $uname
echo
echo "Lunch menu... pick a combo:"
local i=1
local choice
for choice in $(TARGET_BUILD_APPS= get_build_var COMMON_LUNCH_CHOICES)
do
echo " $i. $choice"
i=$(($i+1))
done
echo
}
2. get_build_var函数
此函数通过调用build/soong/soong_ui.bash --dumpvar-mode $1来获取build variable编译变量
关于build/soong/soong_ui.bash的分析,见soong_ui.bash脚本
函数代码如下:
# Get the exact value of a build variable.
function get_build_var()
{
if [ "$BUILD_VAR_CACHE_READY" = "true" ]
then
eval "echo \"\${var_cache_$1}\""
return
fi
local T=$(gettop)
if [ ! "$T" ]; then
echo "Couldn't locate the top of the tree. Try setting TOP." >&2
return
fi
(\cd $T; build/soong/soong_ui.bash --dumpvar-mode $1)
}
2. _lunch函数
_lunch函数是lunch命令执行时的语法补全函数。
即,当执行lunch命令时,按下tab键一次,则执行_lunch函数一次
_lunch函数提供给我们可供选择的lunch选项(显示出匹配的lunch-combo)
源码如下:
unset COMMON_LUNCH_CHOICES_CACHE
# Tab completion for lunch.
function _lunch()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
if [ -z "$COMMON_LUNCH_CHOICES_CACHE" ]; then
COMMON_LUNCH_CHOICES_CACHE=$(TARGET_BUILD_APPS= get_build_var COMMON_LUNCH_CHOICES)
fi
COMPREPLY=( $(compgen -W "${COMMON_LUNCH_CHOICES_CACHE}" -- ${cur}) )
return 0
}
可以看到这个函数和print_lunch_menu一样都是通过get_build_var函数来获取编译变量

本文深入解析Android编译系统的各个核心组件,包括envsetup.sh脚本、soong_ui.bash脚本、main.go、main.mk等关键文件的作用与实现原理。同时,详细介绍了lunch、make、mm、mmm等常用编译命令的执行流程与功能,为读者提供了一个全面理解Android编译过程的视角。
&spm=1001.2101.3001.5002&articleId=108513708&d=1&t=3&u=17d8420723b548d19bfea1f6cd801438)
3080

被折叠的 条评论
为什么被折叠?



