在系统源码中新增一个产品,源码下载可参考 通过aosp-latest下载Android源码。本文基于 Adnroid 9.0 系统。
步骤
首先,在deivice
目录下,创建目录twitter/m20
。一般目录命名规则为:公司名/产品名。
然后,在新目录下创建 m20.mk
、vendorsetup.sh
、BoardConfig.mk
、AndroidProduct.mk
。
-
vendorsetup.sh
添加产品启动名称。格式为:
add_lunch_combo <product_name>-<build_variant>
,其中 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 ......
参考