构建CyanogenMod 13:通过makefile

时间:2016-10-12 12:33:27

标签: makefile build cyanogenmod

关于CM Wiki的this指南,我已经为我自己的设备编译CM一年多了,但这只不过是重新创建夜间版本。我一直想冒险超越基础,今天我已经掌握了第一步。

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

SAMPLE

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)

现在我想定义另一个带空格的变量,它存储我要在该字段中显示的自定义字符串,例如" CM13 FOO BAR",所以我&#39 ;写下这个:

ifndef CM_VERSION_CUSTOM
    CM_VERSION_CUSTOM := CM13 FOO BAR
endif

...并将CM_VERSION_CUSTOM指定给CM_VERSION适用的地方。

在实践中,这根本不起作用 - 字符串输出到/build.prop不正确,有时好像每个空格都是换行符,有时好像第一个空格之后的内容没有存在,像这样:

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

我尝试将引号('和"已测试)添加到字符串定义或引用CM_VERSION CUSTOM的位置(例如" $(CM_VERSION_CUSTOM)"),但没有帮助。我根本不熟悉makefile,所以我现在感到茫然。有人能以正确的方式指出我吗?

1 个答案:

答案 0 :(得分:0)

我最终只为此编写了一个shell脚本。我将脚本打包在一个可刷新的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的帮助下),在构建之前很难触及。