Andoid 编译系统一 一、 编译命令。
执行Android系统的编译,必须运行envsetup.sh脚本,这个脚本会建立android 的编译环境,envsetup.sh文件定义了很多shell命令,这些命令在envsetup.sh脚本之后就可以从shell环境中调用了。编译中执行的lunch命令就是在envsetup.sh脚本定义的,在文件中 有add_lunch_combo命令,同时envsetup.sh定义了:
for f in test -d device && find -L device -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort \ test -d vendor && find -L vendor -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort \ test -d product && find -L product -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort
在device和vendor目录下搜索envsetup.sh文件 并执行它们。 Add_lunch_combo 命令功能就是将调用该命令所传的参数存放到一个全局的数组变量LUNCH_MENU_CHOICES中,执行“lunch”命令会打印出菜单项正是这项内容。 unset LUNCH_MENU_CHOICES function add_lunch_combo() { local new_combo= 1localcforcin {LUNCH_MENU_CHOICES[@]} ; do if [ “ newcombo"=" c” ] ; then return fi done LUNCH_MENU_CHOICES=( LUNCHMENUCHOICES[@] new_combo) }
add_lunch_combo aosp_arm-eng add_lunch_combo aosp_arm64-eng add_lunch_combo aosp_mips-eng add_lunch_combo aosp_mips64-eng add_lunch_combo aosp_x86-eng add_lunch_combo aosp_x86_64-eng
具体如:
上面这些选项都是通过add_lunch_combo命令加入的。
二 Envsetup.sh 脚本还定义了一些其他有用的shell 命令,这些命令可以单独使用。例如
Lunch 当前编译的产品 croot 跳转到根目录 m 编译整个源码 mm 编译当前目录所有模块,不编译依赖模块 mmm 编译指定模块,不编译依赖模块 mma 编译当前目录所有模块,编译依赖模块 mmma 编译指定模块,编译依赖模块 cgrep 对所有的c/c++文件执行grep命令 ggrep 对所有的Gradle文件执行grep命令 jgrep 对所有的java文件执行grep命令 resgrep 对所有的资源文件执行grep命令 sgrep 对所有的文件执行grep命令 godir 查找目录,并切换。
Lunch 命令没有参数,打印产品列表,以供选择,如果有名称,格式为“——-< build_variant >”其中其半部分是产品名称,后面是“build_variant”必须是,eng /user/userdebug 三者之一。
三、Lunch 主要作用就是根据用户输入或选择的产品的名来设置与产品相关的环境变量。
执行lunch之后,系统会打印当前的配置所生成的环境变量,例如输入 lunch 37 会出现
这些环境变量将影响编译过程。 PLATFORM_VERSION_CODENAME:平台版本名称,通常是AOSP(Android Open Source Project的缩写) PLATFORM_ VERSION:Android平台的版本号。 TARGET_PRODUCT:所编译的产品名称。 TARGET_BUILD_VARIANT:表示编译产品的类型。可能值有 eng ,user .userdebug. TARGET_BUILD_TYPE:表示编译的类型,可选值为release和debug当选择debug版本时,系统会加入调式信息,方便追踪。 TARGET_BUILD_APPS:编译系统时,这个变量值为空,编译单个模块时,这个模块的变量值为模块的路径。 TARGET_ARCH:编译目标的CPU架构。 TARGET_ARCH_VARIANT: 编译目标的CPU架构版本 TARGET_CPU_VARIANT: 编译目标的CPU代号 TARGET_2ND_ARCH: 编译目标的第二CPU架构 TARGET_2ND_ARCH _VARIANT: 编译目标的第二CPU架构版本 TARGET_2ND_CPU_VARIANT: 编译目标的第二CPU代号 HOST_ARCH:编译平台架构。 HOST_OS:编译平台使用的操作系统。 HOST_OS_EXTRA:编译平台操作系统的一些额外信息,包括版本号、产品名称、代号等。 BUILD_ID:编译版本信息,可以定义公司特有标识。 OUT_DIR:编译结果输出目录。
