这里假设我们的公司名叫果冻(Jelly),我们准备开发一款对标苹果 14 的手机,取名叫 大米14(Rice14)。
接下来我们在源码中添加我们自己的产品(Product)
在 device 目录下添加如下的目录与文件:
Jelly/
└── Rice14├── AndroidProducts.mk├── BoardConfig.mk└── rice14.mk
BoardConfig.mk 包含了硬件芯片架构配置,分区大小配置等信息这里我们直接使用 aosp_x86_64 的BoardConfig.mk 就行。
BoardConfig.mk 拷贝自 build/target/board/generic_x86_64/BoardConfig.mk
# x86_64 emulator specific definitions
TARGET_CPU_ABI := x86_64
TARGET_ARCH := x86_64
TARGET_ARCH_VARIANT := x86_64TARGET_2ND_CPU_ABI := x86
TARGET_2ND_ARCH := x86
TARGET_2ND_ARCH_VARIANT := x86_64TARGET_PRELINK_MODULE := false
include build/make/target/board/BoardConfigGsiCommon.mk
include build/make/target/board/BoardConfigEmuCommon.mkBOARD_USERDATAIMAGE_PARTITION_SIZE := 576716800BOARD_SEPOLICY_DIRS += device/generic/goldfish/sepolicy/x86# Wifi.
BOARD_WLAN_DEVICE := emulator
BOARD_HOSTAPD_DRIVER := NL80211
BOARD_WPA_SUPPLICANT_DRIVER := NL80211
BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_simulated
BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_simulated
WPA_SUPPLICANT_VERSION := VER_0_8_X
WIFI_DRIVER_FW_PATH_PARAM := "/dev/null"
WIFI_DRIVER_FW_PATH_STA := "/dev/null"
WIFI_DRIVER_FW_PATH_AP := "/dev/null"
rice14.mk 拷贝自 build/target/product/aosp_x86_64.mk
其中的 if 语句需要注释掉,同时需要修改最后四行
PRODUCT_USE_DYNAMIC_PARTITIONS := true# The system image of aosp_x86_64-userdebug is a GSI for the devices with:
# - x86 64 bits user space
# - 64 bits binder interface
# - system-as-root
# - VNDK enforcement
# - compatible property override enabled# This is a build configuration for a full-featured build of the
# Open-Source part of the tree. It's geared toward a US-centric
# build quite specifically for the emulator, and might not be
# entirely appropriate to inherit from for on-device configurations.# GSI for system/product
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/gsi_common.mk)# Emulator for vendor
$(call inherit-product-if-exists, device/generic/goldfish/x86_64-vendor.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/emulator_vendor.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/board/generic_x86_64/device.mk)# Enable mainline checking for excat this product name
# 注释掉
#ifeq (aosp_x86_64,$(TARGET_PRODUCT))
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
#endifPRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \root/init.zygote32_64.rc \root/init.zygote64_32.rc \# Copy different zygote settings for vendor.img to select by setting property
# ro.zygote=zygote64_32 or ro.zygote=zygote32_64:
# 1. 64-bit primary, 32-bit secondary OR
# 2. 32-bit primary, 64-bit secondary
# init.zygote64_32.rc is in the core_64_bit.mk below
PRODUCT_COPY_FILES += \system/core/rootdir/init.zygote32_64.rc:root/init.zygote32_64.rc# Overrides
# 修改产品名
PRODUCT_BRAND := Jelly
PRODUCT_NAME := rice14
PRODUCT_DEVICE := rice14
PRODUCT_MODEL := Rice14
AndroidProducts.mk 内容如下:
PRODUCT_MAKEFILES := \$(LOCAL_DIR)/rice14.mkCOMMON_LUNCH_CHOICES := \rice14-eng \rice14-userdebug \rice14-user \
最后验证:
source build/envsetup.sh
lunch rice14-eng
make -j16
emulator