我需要在我的构建脚本中设置一个基于我正在构建的风格的值。下面是我当前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'
}
}现在,我想根据构建的是lite还是premium来将testdroid.projectName设置为不同的值。我尝试了以下几种方法:
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设置为正确的值?
发布于 2016-01-25 05:00:38
正如在注释中所解释的,在构建buildscript时,这两个术语都会被计算,而后一个术语会设置该值。
为此,您可以使用每个任务/项都具有的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
}
}
} https://stackoverflow.com/questions/34981241
复制相似问题