在系统源码中新增一个产品,源码下载可参考 通过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
时读取。
......
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
......
参考
AndroidProducts.mk