根据当前构建/风格设置设置值

时间:2016-01-24 20:45:08

标签: android groovy gradle

我需要根据我正在构建的风格在构建脚本中设置一个值。以下是我当前build.gradle的相关部分:

android {
    // ...
    productFlavors {
        lite {
            applicationId "bbct.android"
            versionCode 15
            versionName "0.6.2"
        }
        premium {
            applicationId "bbct.android.premium"
            versionCode 14
            versionName "0.6.2"
        }
    }
}

testdroid {
    mode 'FULL_RUN'
    projectName 'BBCT Lite'

    fullRunConfig {
        instrumentationRunner = 'android.support.test.runner.AndroidJUnitRunner'
    }
}

现在我想将testdroid.projectName设置为不同的值,具体取决于我是否构建litepremium风格。我尝试了以下方法:

android {
    // ...
    productFlavors {
        lite {
            applicationId "bbct.android"
            versionCode 15
            versionName "0.6.2"
            testdroid.projectName = "BBCT Lite" // here
        }
        premium {
            applicationId "bbct.android.premium"
            versionCode 14
            versionName "0.6.2"
            testdroid.projectName = "BBCT Premium" // and here
        }
    }
}

但是,这会无条件地将testdroid.projectName分配给"BBCT Premium"。 (我假设因为执行的最后一行将其设置为此值。)如何根据我的构建风格将testdroid.projectName设置为正确的值?

1 个答案:

答案 0 :(得分:1)

正如评论中已经解释的那样,在构建buildcript时,两个术语都会被评估,后一个术语会设置值。

为此,您可以使用每个任务/项目具有的ext对象。如果您为其分配值,则可以稍后在实际构建中执行正确的步骤。

以下是一种方法,使用afterEvaluate或其他东西确实有更好的方法,但这对我来说在类似的用例中有用。

android {
    productFlavors {
        lite {
            applicationId "bbct.android"
            versionCode 15
            versionName "0.6.2"
            ext.projectName = "BBCT Lite" // here
        }
        premium {
            applicationId "bbct.android.premium"
            versionCode 14
            versionName "0.6.2"
            ext.projectName = "BBCT Premium" // and here
        }
    }
}
preBuild << {
    android.applicationVariants.all { variant ->
        variant.productFlavors.each { flavor ->
            resValue "string", "projectName", flavor.ext.projectName
            testdroid.projectName = flavor.ext.projectName
        }
    }
}