Android build.prop生成过程分析

来源:互联网 发布:淘宝买东西不用验证码 编辑:程序博客网 时间:2024/06/06 02:35
build.prop的是build/core/Makefile生成的。
ifdef TARGET_SYSTEM_PROPsystem_prop_file := $(TARGET_SYSTEM_PROP)elsesystem_prop_file := $(wildcard $(TARGET_DEVICE_DIR)/system.prop)endif
先加载项目的system.prop,变量TARGET_DEVICE_DIR赋值代码如下:
TARGET_DEVICE_DIR := $(patsubst %/,%,$(dir $(board_config_mk)))board_config_mk := \$(strip $(wildcard \$(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk \$(shell test -d device && find device -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk') \$(shell test -d vendor && find vendor -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk') \))

代码先查找device和vendor目录下面有BoardConfig.mk的文件夹赋值给变量board_config_mk,board_config_mk里面的目录在去掉末尾的“/”后赋值给TARGET_DEVICE_DIR。

下面就到了生成build.prop了,

$(INSTALLED_BUILD_PROP_TARGET): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $(BUILD_SYSTEM)/version_defaults.mk $(system_prop_file)@echo Target buildinfo: $@@mkdir -p $(dir $@)$(hide) TARGET_BUILD_TYPE="$(TARGET_BUILD_VARIANT)" \TARGET_DEVICE="$(TARGET_DEVICE)" \PRODUCT_NAME="$(TARGET_PRODUCT)" \PRODUCT_BRAND="$(PRODUCT_BRAND)" \PRODUCT_DEFAULT_LANGUAGE="$(call default-locale-language,$(PRODUCT_LOCALES))" \PRODUCT_DEFAULT_REGION="$(call default-locale-region,$(PRODUCT_LOCALES))" \PRODUCT_DEFAULT_WIFI_CHANNELS="$(PRODUCT_DEFAULT_WIFI_CHANNELS)" \PRODUCT_MODEL="$(PRODUCT_MODEL)" \PRODUCT_MANUFACTURER="$(PRODUCT_MANUFACTURER)" \PRIVATE_BUILD_DESC="$(PRIVATE_BUILD_DESC)" \BUILD_ID="$(BUILD_ID)" \BUILD_DISPLAY_ID="$(BUILD_DISPLAY_ID)" \BUILD_NUMBER="$(BUILD_NUMBER)" \PLATFORM_VERSION="$(PLATFORM_VERSION)" \PLATFORM_SDK_VERSION="$(PLATFORM_SDK_VERSION)" \PLATFORM_VERSION_CODENAME="$(PLATFORM_VERSION_CODENAME)" \BUILD_VERSION_TAGS="$(BUILD_VERSION_TAGS)" \TARGET_BOOTLOADER_BOARD_NAME="$(TARGET_BOOTLOADER_BOARD_NAME)" \BUILD_FINGERPRINT="$(BUILD_FINGERPRINT)" \TARGET_BOARD_PLATFORM="$(TARGET_BOARD_PLATFORM)" \TARGET_CPU_ABI="$(TARGET_CPU_ABI)" \TARGET_CPU_ABI2="$(TARGET_CPU_ABI2)" \TARGET_AAPT_CHARACTERISTICS="$(TARGET_AAPT_CHARACTERISTICS)" \        bash $(BUILDINFO_SH) > $@$(hide) $(foreach file,$(system_prop_file), \if [ -f "$(file)" ]; then \echo "#" >> $@; \echo Target buildinfo from: "$(file)"; \echo "# from $(file)" >> $@; \echo "#" >> $@; \cat $(file) >> $@; \fi;)$(if $(ADDITIONAL_BUILD_PROPERTIES), \$(hide) echo >> $@; \        echo "#" >> $@; \        echo "# ADDITIONAL_BUILD_PROPERTIES" >> $@; \        echo "#" >> $@; )$(hide) $(foreach line,$(ADDITIONAL_BUILD_PROPERTIES), \echo "$(line)" >> $@;)$(hide) build/tools/post_process_props.py $@
生成总共分三部分。

第一部分是通过build/tools/buildinfo.sh生成一部分,关键代码是bash $(BUILDINFO_SH) > $@,这句代码之前的部分都是为这个shell脚本的执行要用的变量赋值。

第二部分是我们项目的system.prop,直接是把system.prop追加到build.prop.代码很简单就不分析了。

第三部分是变量ADDITIONAL_BUILD_PROPERTIES的值,也是把值都追加到build.prop。




0 0
原创粉丝点击