一般源码的编译前都会执行lunch命令,选择编译目标:
source build/envsetup.sh
lunch BUILD_BUILDTYPE
其中BUILDTYPE可以为user、userdebug、eng,排行越靠后,调试信息越多,权限越大,而其中的BUILD编译目标就是build目录下产品配置信息决定的。
vendorsetup.sh
build目录一般结构为:
build-> company -> product,在product同级的目录下可能有common目录,为所有产品共用。
在product目录下一般有vendorsetup.sh,这个脚本就是在envsetup.sh中被调用,envsetup.sh会遍历并且source源码目录下device和vendor(新版源码不推荐使用)下所有的vendorsetup.sh
vendorsetup.sh内容格式为:
add_lunch_combo rk3288_eng
通过上面语句,lunch菜单中将添加“rk3288_eng”选项。
AndroidProducts.mk
产品的实际属性由product目录下的AndroidProducts.mk,这个文件实际是一个散转,作用为包含其他命名的*.mk文件,这些文件下面可能会有各种以“PRODUCT_”开头的属性:PRODUCT_NAME、PRODUCT_MODEL、PRODUCT_BRAND等等。
BoardConfig.mk
通过上面的AndroidProducts.mk被包含进来,主要描述目标架构、硬件设备属性、编译器条件标识、boot地址、ramdisk大小等一系列硬件参数。
device.mk
也是通过AndroidProducts.mk被包含进来,主要描述该产品需要将哪些软件功能模块编译进镜像。
Android.mk
这个是Android源码树通用的模块Makefile,声明该目录在源码中的存在性。