
前言
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文件的关键步骤之一。
1 | longzhiye@Ubuntu:~/work/androidT/build/make$ grep "ro.build.display.id" . -r -n |
1 | longzhiye@Ubuntu:~/work/androidT/build/make$ grep "BUILD_DISPLAY_ID" . -r -n |
进一步检索发现,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
1 | gen_from_buildinfo_sh := $(call intermediates-dir-for,PACKAGING,system_build_prop)/buildinfo.prop |
sysprop.mk文件中定义了gen_from_buildinfo_sh变量,该变量指向了buildinfo.prop文件的生成路径。
1 | (call intermediates-dir-for,PACKAGING,system_build_prop)/buildinfo.prop 文件中的值 |
在编译产物路径下找到了buildinfo.prop文件的实际位置,并进行了实验。
1 | 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脚本控制的。
1 | out/target/product/XXX/obj/ETC/system_build_prop_intermediates/build.prop |
综上所述,OTA升级过程中版本号的正确使用依赖于build.prop文件的准确生成。通过深入分析和实验验证,揭示了build.prop文件的生成机制,为OTA升级过程中的版本管理提供了有力的技术支撑。
本文链接:
http://longzhiye.top/2024/10/05/2024-10-05/