在系统源码中新增一个产品,源码下载可参考 通过aosp-latest下载Android源码。本文基于 Adnroid 9.0 系统。
步骤
首先,在deivice目录下,创建目录twitter/m20。一般目录命名规则为:公司名/产品名。
然后,在新目录下创建 m20.mk、vendorsetup.sh、BoardConfig.mk 、AndroidProduct.mk 。
vendorsetup.sh
添加产品启动名称。格式为:add_lunch_combo ,其中 build_variant 仅能为空、eng、user、userdebug。
add_lunch_combo m20-eng
add_lunch_combo m20-userdebug
add_lunch_combo m20-user
BoardConfig.mk
主板配置。此处我直接拷贝了device/generic/x86_64下的该文件。
m20.mk
该产品Makefile文件,里面包含了产品名称、设备名称、包含的厂商的App和Service等等。此处我直接拷贝了device/generic/x86_64下的产品文件做了修改。
......
# 我们自定义的产品名字。需与vendorsetup.sh定义的名字一致。
PRODUCT_NAME := m20
# 需与文件夹名一致。
PRODUCT_DEVICE := m20
PRODUCT_BRAND := oppo
PRODUCT_MODEL := m20
......
AndroidProduct.mk
添加指定产品Makefile 文件。此处我直接拷贝了device/generic/x86_64下的该文件做了修改。
# 将 m20.mk 加入到 PRODUCT_MAKEFILES 中
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/m20.mk
vendorsetup.sh、BoardConfig.mk 、AndroidProduct.mk 各文件加载:
产品的vendorsetup.sh,当 source build/envsetup.sh时读取。
......
# Execute the contents of any vendorsetup.sh files we can find.
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`
do
echo "including $f"
. $f
done
......
从build/envsetup.sh脚本中,可以看出,会读取device、vendor、product三个目录4层以内的所有vendorsetup.sh。若你想加载其他位置,则需改动此处代码。
lunch时,可看见已包含新产品:
xxx@android:~/aosp9$ lunch
You're building on Linux
Lunch menu... pick a combo:
1. aosp_arm-eng
2. aosp_arm64-eng
......
55. m20-eng
56. m20-userdebug
57. m20-user
......
产品的BoardConfig.mk,在envsetup.mk中会加载
......
board_config_mk := \
$(strip $(sort $(wildcard \
$(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk \
$(shell test -d device && find -L device -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk') \
$(shell test -d vendor && find -L vendor -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk') \
)))
......
产品的AndroidProducts.mk在product.mk中被加载
......
define _find-android-products-files
$(foreach d, device vendor product,$(call _search-android-products-files-in-dir,$(d))) \
$(SRC_TARGET_DIR)/product/AndroidProducts.mk
endef
......
参考