即使在同步期间也会执行自定义gradle任务

时间:2017-11-17 23:58:08

标签: android android-gradle

所以我确信这是一个非常愚蠢的错误,但我需要你的帮助,因为我不是一个傻瓜专家。

TASK: 从文件中读取versionCode并向其添加+1并将其保存回来。

task executeOrderSixtySix {
def versionPropsFile = file('versionCodes.properties')
if (versionPropsFile.canRead()) {
    def Properties versionProps = new Properties()

    versionProps.load(new FileInputStream(versionPropsFile))

    def versionNumber = versionProps['DEV_VERSION'].toInteger() + 1
    versionProps['DEV_VERSION'] = versionNumber.toString()
    versionProps.store(versionPropsFile.newWriter(), null)

    //     'assembleDebug'

} else {
    throw new GradleException("Nyeeeh on versionCodes.properties!")
}}

因此,当我必须进行内部删除时,我想首先运行此任务,将devVersion数字增加1,然后运行'汇编'构建所有工件的任务。

问题: 即使我只是同步摇篮文件导致增加的versionCode,此任务也会自行执行。

我不想在同步期间增加versionCode,只为QAdrop开发版本,当我还要组装每个APK时。

你能帮帮我,告诉我为什么这个任务被调用/执行以及我可以阻止它?

1 个答案:

答案 0 :(得分:2)

您的任务块中需要一个doLast块。 build.gradle文件是一个配置脚本,因此它在配置时读取为声明任务,并在执行时声明操作。

  

在doLast块之前或之后在任务中完成的任何操作都将在配置时运行。 doLast块中的代码本身在执行时运行。

task executeOrderSixtySix {
    doLast {
        def versionPropsFile = file('versionCodes.properties')
        if (versionPropsFile.canRead()) {
            def Properties versionProps = new Properties()

            versionProps.load(new FileInputStream(versionPropsFile))

            def versionNumber = versionProps['DEV_VERSION'].toInteger() + 1
            versionProps['DEV_VERSION'] = versionNumber.toString()
            versionProps.store(versionPropsFile.newWriter(), null)

            //     'assembleDebug'

        } else {
            throw new GradleException("Nyeeeh on versionCodes.properties!")
        }
    }
}

参考:https://www.oreilly.com/learning/write-your-own-custom-tasks-in-gradle