构建 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
的帮助下),这些在构建之前很难触及。
遵循 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
的帮助下),这些在构建之前很难触及。