如何定制AOSP构建版本号?

8
我正在构建AOSP v4.4.2。我想指定“版本号”字符串的一部分(如设置-> 关于平板电脑)。

About tablet page

我知道可以通过使用CONFIG_LOCALVERSION defconfig值来实现内核的这种更改。但我想更改“构建号”,而不是“内核版本”(我已经成功地更改了“内核版本”)。
目前,我的AOSP构建的相关部分如下:
# Source build variables
. build/envsetup.sh

# Specify the build target:
# * user -> limited access; suited for production (no ADB)
# * userdebug -> like "user" but with root access and debuggability; preferred for debugging
# * eng -> development configuration with additional debugging tools (with ADB)
lunch mydevice-eng

# Build it!
time m 2>&1 | tee build.out

我应该改变什么来指定构建编号?

2个回答

14
Makefile 就是定义构建版本号(连接)的文件。

用户构建

对于用户构建(使用lunch指定的构建目标),构建号将简单地为“$(BUILD_ID) $(BUILD_KEYS)”,除非设置了DISPLAY_BUILD_NUMBER参数为“true”。

eng/userdebug 构建

对于其他构建(即eng/userdebug),会包括更多的信息:

build_desc := $(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT) $(PLATFORM_VERSION) $(BUILD_ID) $(BUILD_NUMBER) $(BUILD_VERSION_TAGS)

Makefile源代码在此处可用:https://android.googlesource.com/platform/build/+/android-4.4.2_r1/core/Makefile#106


在make文件中设置构建参数

@eldarerathis所提到的那样build/core/build_id.mk中的BUILD_ID值定义了构建字符串的一部分,但是这可能会被另一个make(*.mk)文件覆盖。

运行lunch时,将打印BUILD_ID的值以进行验证。如果此值与build_id.mk文件中的值不同,则搜索设置该值的位置并重新配置它。例如,如果作为lunch的一部分,输出包括“4.4.2_1.0.0-ga”:

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.4.2
...
HOST_BUILD_TYPE=release
BUILD_ID=4.4.2_1.0.0-ga
OUT_DIR=out
============================================

...然后搜索“4.4.2_1.0.0-ga”以找到它:

me@mybox:~/AOSP$find . -name "*.mk" | xargs grep  "4.4.2_1.0.0-ga"

然后,更新包含BUILD_ID.mk文件。相应地设置其他构建参数。

BUILD_NUMBERPLATFORM_VERSIONBUILD_ID位于:build/core/version_defaults.mk。如果在没有设置它们的情况下启动构建,则会设置这些值。

将构建参数设置为构建时的参数

或者(并且我认为更好的方法是),可以像这样将这些参数作为构建命令行的一部分进行设置:

me@mybox:~/AOSP$ time m BUILD_ID="MyBuildv1.2" BUILD_NUMBER=12345   2>&1 | tee build.out 

12

BUILD_ID值在build/core/build_id.mk中定义:

# BUILD_ID is usually used to specify the branch name
# (like "MAIN") or a branch name and a release candidate
# (like "CRB01").  It must be a single word, and is
# capitalized by convention.

export BUILD_ID=KOT49H

那个值被写入到您构建的属性中,而“设置”则从那里读取它,因此您只需要将那个export更改为您想要的内容即可。注释仅仅是提供信息,您无需遵循其中概述的约定。在主分支中,它当前被定义为AOSP

另一个可用的标志是DISPLAY_BUILD_NUMBER示例)。它是可选的,在您的情况下可能不需要,但如果有用的话,这里是它的工作描述:

# DISPLAY_BUILD_NUMBER should only be set for development branches,
# If set, the BUILD_NUMBER (cl) is appended to the BUILD_ID for
# a more descriptive BUILD_ID_DISPLAY, otherwise BUILD_ID_DISPLAY
# is the same as BUILD_ID
DISPLAY_BUILD_NUMBER := true

谢谢,这看起来很有前途。在修改build/core/build_id.mk后重新运行lunch mydevice-eng之后,我仍然会看到以下输出:BUILD_ID=4.4.2_1.0.0-ga。这有关系吗?(我没有让完整的构建运行) - CJBS
我真的没有看到 lunch 输出任何类似那样的东西。我看到它恰好回显了我在 build_id.mk 中定义的内容。这是您在刷写构建后通常在设置中看到的构建号码吗? - eldarerathis
我已经解决了这个问题,并且很快会发布完整的细节。你确实让我找对了方向,所以谢谢(+1)。基本上有一个制造商特定的 make 文件,在 build_id.mk 中设置后再进行设置。 - CJBS
啊,原来是设备树里覆盖了它?这是非 Nexus 设备吗?这可能解释了为什么我之前没看到。 - eldarerathis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接