首页 > 其他分享 >深入解析Android OTA升级中的版本号管理与build.prop文件生成机制

深入解析Android OTA升级中的版本号管理与build.prop文件生成机制

时间:2024-12-04 11:28:19浏览次数:6  
标签:DISPLAY 版本号 OTA prop build ID buildinfo BUILD

前言

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

相关文章

  • 使用antd的ProTable表格,打印时表头不全
    问题项目中使用antd的ProTable表格,在打印时发现表头不全,如下图:表格有5列,但表头只展示了3列,审查元素发现table下有个colgroup来控制表头宽度解决修改代码:在打印时隐藏colgroup即可@mediaprint{colgroup{display:none;}}实现效果如下:......
  • 如果要你定义一个版本号的规则,你该定义成什么样的?说说你的理由?
    我会定义一个基于语义化版本控制2.0.0的版本号规则,并结合前端项目的特殊性进行一些补充。具体如下:主版本号(MAJOR):当进行不兼容的API更改时递增。例如,移除或重命名一个公开的组件、改变组件的核心行为以致于之前的代码需要修改才能兼容。次版本号(MINOR):当以向后兼容的方......
  • Java 配置与泛型:Properties 与 Map 的实际应用
    在Java中,Map和Properties都是用来存储键值对的集合类,但它们的设计目标不同,因此它们在泛型支持上的选择也不同。具体来说:1.Properties的设计目标Properties类是为配置文件而设计的,目的是处理键值对形式的配置项。其特点包括:键和值必须都是字符串(String):配置文件中的内......
  • 如何解决 Java Properties 文件中 .ini文件乱码问题
    如何解决JavaProperties文件中.ini文件乱码问题在Java开发中,配置文件是一项常见的需求,通常我们使用.properties文件来保存应用程序的配置。然而,当我们尝试使用.ini文件(即带有非标准字符编码的配置文件)时,经常会遇到乱码问题。这个问题的出现,通常是因为Properties类默......
  • C# 如何在 PropertyGrid 中,对同一double的成员显示出不同的长度的内容?
    这段时间搞东西,接触到这个,整了好几天。终于Stackoverflow上找到一个与我思路上一样的答案。之前用了好多遍百度AI的方法都牛头不对马嘴。看来自己对这一套C#的中的反射机制中的内容还不是太熟悉。所以摸了好久。主要思路是这样的:PropertyGrid可以把一个对象中public......
  • DooTask与企业并肩,开启年终总结与新年展望新纪元
    12月是一年的尾声,对于公司而言,这一特殊时期既是回顾过去、总结经验的重要阶段,也是展望未来、规划发展的关键交汇点。在这一年的最后阶段,企业通常会忙于总结过去一年的业绩与成就,分析市场趋势,评估项目成果,以及调整战略方向。而DooTask,作为一款开源的在线项目任务管理工具,在这一......
  • vue基础之4:el与data的两种写法、理解MVVM、Object.defineProperty方法、数据代理
    欢迎来到“雪碧聊技术”CSDN博客!在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将不断探索Java的深邃世界,分享最新的技术动态、实战经验以及项目......
  • 如何正确获取系统版本号
    细心的同学会发现,我们通过内置函数Environment.OSVersion获取到的系统版本号会存在不同的系统版本,版本号是一样的情况。代替的方案可以通过windowsapi来获取内置版本号。实现方法比较简单,就不做描述,以下是完整可用的代码。publicclassWin32{[DllImport("nt......
  • [C++][CMake][Error] set_target_properties called with incorrect number of argume
    1简介这篇文章将探讨了在使用CMake构建C++项目时,调用set_target_properties函数时参数数量不正确所引发的问题。2错误案例以下为可能发生错误的案例include_directories(${CMAKE_SOURCE_DIR}/common)find_package(Threads)add_library(libusbmuxdSHAREDlibusbm......
  • OTA是什么意思?
    OTA是“Over-the-Air”的缩写,意思是“在线升级”。简单说,OTA就像你手机的系统更新,只不过这次更新的是你的汽车......