我需要根据我正在构建的风格在构建脚本中设置一个值。以下是我当前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
设置为不同的值,具体取决于我是否构建lite
或premium
风格。我尝试了以下方法:
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
设置为正确的值?
答案 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
}
}
}