Android Build System详解

Android Build System Architecture

其中$(TOP)/Makefile位于android的顶层目录中。其它Makefile文件均位于$(TOP)/build/core目录下

Initialize the environment

   初始化编译环境使用的是$(TOP)/build/envsetup.sh脚本。
envsetup.sh提供的函数以下:
函数 功能
hmm 帮助命令,envsetup.sh提供的函数的用法
get_abs_build_var
get_build_var
check_product
check_variant
setpaths
printconfig
set_stuff_for_environment
set_sequence_number
settitle
addcompletions
choosetype
chooseproduct
choosevariant
choosecombo
add_lunch_combo
print_lunch_menu
lunch
_lunch
tapas
gettop
getdriver
m 从顶层目录build整个系统
mmm build指定目录下全部的模块
mma build当前目录下全部的模块以及这些模块所依赖的模块
mmma build指定目录下全部的模块以及这些模块所依赖的模块
croot 到android所在的顶层目录
cproj
qpid
pid
systemstack
stacks
gdbwrapper
sgrep
gettargetarch
jgrep
cgrep
resgrep
mangrep
sepgrep
mgrep
treegrep
getprebuilt
tracedmdump
runhat
getbugreports
getsdcardpath
getscreenshotpath
startviewserver
isviewserverstarted
key_home
key_back
key_menu
smoketest
runtest
godir
set_java_home
pez
findnmakefile
gdbcleint

# Clear this variable.  It will be built up again when the vendorsetup.sh
# files are included at the end of this file.
unset LUNCH_MENU_CHOICES
function add_lunch_combo()
{
    local new_combo=$1
    local c
    for c in ${LUNCH_MENU_CHOICES[@]} ; do 
        if [ "$new_combo" = "$c" ] ; then 
            return
        fi   
    done 
    LUNCH_MENU_CHOICES=(${LUNCH_MENU_CHOICES[@]} $new_combo)
}

# add the default one here
add_lunch_combo aosp_arm-eng
add_lunch_combo aosp_x86-eng
add_lunch_combo aosp_mips-eng
add_lunch_combo aosp_x86_64-eng
add_lunch_combo vbox_x86-eng
调用add_lunch_combo函数将 combo配置到LUNCH_MENU_CHOICES变量中。lunch命令就是选择combo。
# Execute the contents of any vendorsetup.sh files we can find.
for f in `test -d device && find device -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null` \
         `test -d vendor && find vendor -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null`
do
    echo "including $f"
    . $f
done
unset f
搜索device目录下全部的vendorsetup.sh,并执行。下面是ti的vendorsetup.sh的例子:
add_lunch_combo  full_panda-userdebug
其中full_panda-userdebug分为两部分,一部分是product name:full_panda,一部分是Build variant:userdebug. build variant共有三种选择分别是user, userdebug, eng

eng:工程机
user:最终用户机
userdebug:调试测试机
编译环境设置完成后,就能够编译整个android系统。