前言
OTA(Over-The-Air)升级过程中,版本号扮演着至关重要的角色。从低版本向高版本的升级操作,必须依赖于当前设备的属性信息,其中版本号就是核心要素之一
为了深入探究build.prop文件的生成机制,我们在build/目录下进行了广泛的搜索,特别是针对ro.build.display.id这一关键属性。在build/make/路径下的多个脚本和Python文件中,我们发现了与ro.build.display.id相关的引用。其中,buildinfo.sh脚本负责将BUILD_DISPLAY_ID的值写入到属性文件中,这是生成build.prop文件的关键步骤之一。
longzhiye@Ubuntu:~/work/androidT/build/make$ grep "ro.build.display.id" . -r -n
./tools/releasetools/target_files_diff.py:66: 'ro.build.display.id=',
./tools/releasetools/test_sign_target_files_apks.py:143: ('ro.build.display.id=',
./tools/releasetools/test_sign_target_files_apks.py:144: 'ro.build.display.id='),
./tools/releasetools/sign_target_files_apks.py:890: elif key == "ro.build.display.id":
./tools/buildinfo.sh:12:echo "ro.build.display.id=$BUILD_DISPLAY_ID"
longzhiye@Ubuntu:~/work/androidT/build/make$ grep "BUILD_DISPLAY_ID" . -r -n
./tools/buildinfo.sh:echo "ro.build.display.id=$BUILD_DISPLAY_ID"
./core/sysprop.mk:# BUILD_DISPLAY_ID is shown under Settings -> About Phone
./core/sysprop.mk: BUILD_DISPLAY_ID="$(BUILD_DISPLAY_ID)" \
进一步检索发现,BUILD_DISPLAY_ID的值是在build/make/core/sysprop.mk文件中定义的。这个Makefile脚本通过调用buildinfo.sh脚本,并传递一系列构建参数(如TARGET_BUILD_TYPE、BUILD_ID、BUILD_DISPLAY_ID等),最终生成了包含这些属性值的buildinfo.prop文件。这个中间产物文件位于out/target/product/XXX/obj/PACKAGING/system_build_prop_intermediates/目录下(在Android T及更高版本中,路径可能略有不同,如out/target/product/XXX/obj/ETC/system_build_prop_intermediates/)。
build/make/core/sysprop.mk
gen_from_buildinfo_sh := $(call intermediates-dir-for,PACKAGING,system_build_prop)/buildinfo.prop
$(gen_from_buildinfo_sh): $(INTERNAL_BUILD_ID_MAKEFILE) $(API_FINGERPRINT) | $(BUILD_DATETIME_FILE) $(BUILD_NUMBER_FILE)
$(hide) TARGET_BUILD_TYPE="$(TARGET_BUILD_VARIANT)" \
TARGET_BUILD_FLAVOR="$(TARGET_BUILD_FLAVOR)" \
TARGET_DEVICE="$(TARGET_DEVICE)" \
PRODUCT_DEFAULT_LOCALE="$(call get-default-product-locale,$(PRODUCT_LOCALES))" \
PRODUCT_DEFAULT_WIFI_CHANNELS="$(PRODUCT_DEFAULT_WIFI_CHANNELS)" \
PRIVATE_BUILD_DESC="$(BUILD_DESC)" \
BUILD_ID="$(BUILD_ID)" \
BUILD_DISPLAY_ID="$(BUILD_DISPLAY_ID)" \
DATE="$(DATE_FROM_FILE)" \
BUILD_USERNAME="$(BUILD_USERNAME)" \
BUILD_HOSTNAME="$(BUILD_HOSTNAME)" \
BUILD_NUMBER="$(BUILD_NUMBER_FROM_FILE)" \
sysprop.mk文件中定义了gen_from_buildinfo_sh变量,该变量指向了buildinfo.prop文件的生成路径。
$(call intermediates-dir-for,PACKAGING,system_build_prop)/buildinfo.prop 文件中的值
在编译产物路径下找到了buildinfo.prop文件的实际位置,并进行了实验。
out\target\product\XXX\obj\PACKAGING\system_build_prop_intermediates\buildinfo.prop
为了验证这一发现,我们进行了实验:首先删除buildinfo.prop文件,然后执行make命令。结果证明,当buildinfo.prop文件不存在时,构建系统会重新生成该文件,并将其内容复制到最终的system/build.prop文件中。这一实验结果进一步证实了我们的分析,即build.prop文件的生成是由build/make/core/sysprop.mk脚本控制的。
out/target/product/XXX/obj/ETC/system_build_prop_intermediates/build.prop
综上所述,OTA升级过程中版本号的正确使用依赖于build.prop文件的准确生成。通过深入分析和实验验证,揭示了build.prop文件的生成机制,为OTA升级过程中的版本管理提供了有力的技术支撑。
标签:DISPLAY,版本号,OTA,prop,build,ID,buildinfo,BUILD From: https://blog.csdn.net/u010345983/article/details/143860665