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檔案。