第一课:添加product

这是我跟随秋少的系列课程Android系统开发入门做的笔记,感谢原博主秋少! 课程连接

前言

当我们编译AOSP时,需要先执行如下指令:

1
2
3
source build/envsetup.sh
lunch aosp_x86_64-eng
m -j24

其中lunch指令就是选择我们要编译的product。一般做产品时,我们会添加自己的product。

创建product的四要素

创建device目录

device的目录结构:

1
device/[company]/[product]

新建我们的自己的目录:

1
mkdir -p device/vee/veecar

板子配置BoardConfig.mk

BoardConfig.mk包含了硬件芯片架构配置,分区大小等配置信息。

在device/vee/veecar下面,新建板子配置文件BoardConfig.mk,内容可以直接引用其他product的文件:

1
include $(SRC_TARGET_DIR)/board/generic_x86_64/BoardConfig.mk

其中SRC_TARGET_DIR指代$(TOPDIR)build/target,可在build/core/config.mk中找到定义。

产品配置[product].mk

新建产品配置文件veecar.mk内容如下:

1
2
3
4
$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_x86_64.mk)

PRODUCT_NAME   := veecar
PRODUCT_DEVICE := veecar

注意:

编译配置AndroidProducts.mk

新建AndroidProducts.mk文件:

1
2
3
4
5
6
PRODUCT_MAKEFILES := \
    $(LOCAL_DIR)/veecar.mk

// 从安卓10开始用来取代vendorsetup.sh的
COMMON_LUNCH_CHOICES := \
    veecar-eng

其中PRODUCT_MAKEFILES用来指定我们上一步中定义的product.mk文件,其中『veecar』对应我们的productName,eng则为build type:

vendorsetup.sh

创建vendorsetup.sh文件如下:

1
add_lunch_combo veecar-eng

主要作用就是向lunch界面中添加有一个combo,当我们执行source build/envsetup后再lunch,就会发现多了一个『veecar-eng』项目。

**注意:从android10开始不需要这玩意了,使用COMMON_LUNCH_CHOICES来替代。

编译验证

执行下述指令编译验证。

1
2
3
4
source build/envsetup
lunch veecar-eng
m -j26
emulator