构建 CyanogenMod 13:通过 makefile 自定义 build.prop

Building CyanogenMod 13: customizing build.prop via makefile

遵循 CM Wiki 上的 this 指南,我已经为自己的设备编译 CM 一年多了,但这只不过是重新创建夜间构建。我一直想超越基础知识,今天我开始迈出第一步。

我现在打算做的是在构建之前自定义 /system/build.prop,而不是在刷机后修改它。我做了一些研究并确定了一些负责生成它的脚本和 makefile,有问题的 makefile 是 vendor/cm/config/common.mk。我要修改的部分更改了设置-关于中显示的 "CyanogenMod version" 字段,如下图所示:

common.mk 有这些行对应(稍微修改以缩短):

ifeq ($(CM_BUILDTYPE), RELEASE)
    ifndef TARGET_VENDOR_RELEASE_BUILD_ID
        CM_VERSION := $(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR).$(PRODUCT_VERSION_MAINTENANCE)$(PRODUCT_VERSION_DEVICE_SPECIFIC)-$(CM_BUILD)
    else
        ifeq ($(TARGET_BUILD_VARIANT),user)
            ifeq ($(CM_VERSION_MAINTENANCE),0)
                CM_VERSION := $(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR)-$(TARGET_VENDOR_RELEASE_BUILD_ID)-$(CM_BUILD)
            else
                CM_VERSION := $(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR).$(CM_VERSION_MAINTENANCE)-$(TARGET_VENDOR_RELEASE_BUILD_ID)-$(CM_BUILD)
            endif
        else
            CM_VERSION := $(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR).$(PRODUCT_VERSION_MAINTENANCE)$(PRODUCT_VERSION_DEVICE_SPECIFIC)-$(CM_BUILD)
        endif
    endif
else
    ifeq ($(CM_VERSION_MAINTENANCE),0)
        CM_VERSION := $(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR)-$(shell date -u +%Y%m%d)-$(CM_BUILDTYPE)$(CM_EXTRAVERSION)-$(CM_BUILD)
    else
        CM_VERSION := $(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR).$(CM_VERSION_MAINTENANCE)-$(shell date -u +%Y%m%d)-$(CM_BUILDTYPE)$(CM_EXTRAVERSION)-$(CM_BUILD)
    endif
endif

PRODUCT_PROPERTY_OVERRIDES += \
  ro.cm.version=$(CM_VERSION) \
  ro.cm.releasetype=$(CM_BUILDTYPE) \
  ro.modversion=$(CM_VERSION) \
  ro.cm.display.version=$(CM_VERSION)

现在我想用 space 定义另一个 变量来存储我想在该字段中显示的自定义字符串,例如 "CM13 FOO BAR",所以我会这样写:

ifndef CM_VERSION_CUSTOM
    CM_VERSION_CUSTOM := CM13 FOO BAR
endif

...并将 CM_VERSION_CUSTOM 分配给 CM_VERSION 适用的地方。

实际上这根本不起作用 - 字符串被错误地输出到 /build.prop,有时好像每个 space 都是一个换行符,有时好像第一个 [=] 之后的内容45=]不存在,像这样:

ro.cm.version=CM13
FOO
BAR
ro.modversion=CM13
ro.cm.display.version=CM13

我尝试在字符串定义或引用 CM_VERSION CUSTOM 的位置(如“$(CM_VERSION_CUSTOM)”)添加引号(' 和 " tested),但是 none 帮助。我对 makefile 一点都不熟悉,所以我现在不知所措。有人能指出我正确的方法吗?

我最终只是为此编写了一个 shell 脚本。我将脚本打包在一个 flashable zip 中,让 updater-script 调用脚本。脚本本身是这样的:

#!/sbin/sh

CM_VER="CyanogenMod 12.1 Nightly CGMod"
sed -i "s/ro.cm.version=.*/ro.cm.version=$CM_VER/g" /system/build.prop

这不仅允许我修改此 属性,还允许我修改其他内容,例如构建类型、日期和其他(在 grep 的帮助下),这些在构建之前很难触及。