out\target\product\sdm845\system\build.prop
的生成是由make系统解析build/core/Makefile完成,Makefile中首先定义各种变量,其中就有
BUILD_DISPLAY_ID="$(BUILD_DISPLAY_ID)" \
Makefile中调用build/tools/buildinfo.sh执行脚本,并输出到build.prop。
流程
packages\apps\Settings\src\com\android\settings\deviceinfo\BuildNumberPreferenceController.java
通过 preference.setSummary(BidiFormatter.getInstance().unicodeWrap(Build.DISPLAY));
找到 frameworks\base\core\java\android\os\Build.java 中的 public static final String DISPLAY = getString("ro.build.display.id"); 读取system/build.prop中的 ro.build.display.id最终显示出来。
添加新的ro 属性 ro.build.software.version.id:
diff --git a/build/make/core/Makefile b/build/make/core/Makefile
index f670c32..6e04970 100644
--- a/build/make/core/Makefile
+++ b/build/make/core/Makefile
@@ -290,6 +290,21 @@ else
BUILD_DISPLAY_ID := $(build_desc)
endif
+ifeq ($(TARGET_BUILD_VARIANT),user)
+ # User builds should show:
+ # release build number or branch.buld_number non-release builds
+
+ # Dev. branches should have DISPLAY_BUILD_NUMBER set
+ ifeq (true,$(DISPLAY_BUILD_NUMBER))
+ BUILD_SOFTWARE_VERSION_ID := $(BUILD_ID).$(BUILD_NUMBER_FROM_FILE) $(BUILD_KEYS)
+ else
+ BUILD_SOFTWARE_VERSION_ID := $(BUILD_ID) $(BUILD_KEYS)
+ endif
+else
+ # Non-user builds should show detailed build information
+ BUILD_SOFTWARE_VERSION_ID := $(build_desc)
+endif
+
# Accepts a whitespace separated list of product locales such as
# (en_US en_AU en_GB...) and returns the first locale in the list with
# underscores replaced with hyphens. In the example above, this will
@@ -340,6 +355,7 @@ endif
PRIVATE_BUILD_DESC="$(PRIVATE_BUILD_DESC)" \
BUILD_ID="$(BUILD_ID)" \
BUILD_DISPLAY_ID="$(BUILD_DISPLAY_ID)" \
+ BUILD_SOFTWARE_VERSION_ID="$(BUILD_SOFTWARE_VERSION_ID)" \
DATE="$(DATE_FROM_FILE)" \
BUILD_NUMBER="$(BUILD_NUMBER_FROM_FILE)" \
BOARD_BUILD_SYSTEM_ROOT_IMAGE="$(BOARD_BUILD_SYSTEM_ROOT_IMAGE)" \
diff --git a/build/make/tools/buildinfo.sh b/build/make/tools/buildinfo.sh
index 5a54462..3dc08dd 100755
--- a/build/make/tools/buildinfo.sh
+++ b/build/make/tools/buildinfo.sh
@@ -5,6 +5,7 @@ echo "# autogenerated by buildinfo.sh"
echo "ro.build.id=$BUILD_ID"
echo "ro.build.display.id=$BUILD_DISPLAY_ID"
+echo "ro.build.software.version.id=222"
echo "ro.build.version.incremental=$BUILD_NUMBER"
echo "ro.build.version.sdk=$PLATFORM_SDK_VERSION"
echo "ro.build.version.preview_sdk=$PLATFORM_PREVIEW_SDK_VERSION"
diff --git a/frameworks/base/core/java/android/os/Build.java b/frameworks/base/core/java/android/os/Build.java
index de25fd2..84d75b3 100644
--- a/frameworks/base/core/java/android/os/Build.java
+++ b/frameworks/base/core/java/android/os/Build.java
@@ -46,6 +46,9 @@ public class Build {
public static final String DISPLAY = getString("ro.build.display.id");
+
+
+ public static final String SOFTWARE_VERSION = getString("ro.build.software.version.id");
public static final String PRODUCT = getString("ro.product.name");
修改完后,全编make -j3,make update-api,烧录system.img即可。查看out\target\product\sdm845\system\build.prop 查看生成。
https://www.jianshu.com/p/a24c0f3f28a4
https://blog.csdn.net/wdyshowtime/article/details/79635439
https://www.cnblogs.com/bastard/archive/2013/02/28/2937014.html
关于系统属性的分析,参考文件
https://blog.csdn.net/w6028819321/article/details/28294061
http://blog.sina.com.cn/s/blog_63f31f3401017anh.html
在文件 packages/apps/Settings/src/com/android/settings/DeviceInfoSettings.java 中
setStringSummary("build_number", Build.DISPLAY);
指定了设置--关于设备--版本号。
Build.DISPLAY即Build类中的 DISPLAY 变量,在文件frameworks/base/core/java/android/os/Build.java 中:
public static final String DISPLAY = getString("ro.build.display.id");
ro.build.display.id在文件build/tools/buildinfo.sh中:
echo "ro.build.display.id=$BUILD_DISPLAY_ID"
而BUILD_DISPLAY_ID在文件build/core/Makefile中:
BUILD_DISPLAY_ID := $(BUILD_ID).$(BUILD_NUMBER)
其中 BUILD_ID在build/core/build_id.mk中赋值
BUILD_ID := OPENMASTER
BUILD_NUMBER 在 build/core/version_defaults.mk中赋值:
BUILD_NUMBER := eng.$(USER).$(shell date +%Y%m%d.%H%M%S)所以在版本号中会出现编译时间的字段。
ro.build.display.id编译后保持在system下的build.prop文件。