我的设置:
代码:
apply plugin: 'com.android.application'
android {
// ...
signingConfigs {
release {
storeFile getReleaseKeyStoreFile()
// ...
File getReleaseKeyStoreFile() {
String keyStoreFile = System.getenv("KEYSTORE_FILE")
if (keyStoreFile == null || keyStoreFile == "") {
println 'ERROR: Failed getting release keyStoreFile'
return null
}
return file(keyStoreFile)
}
当我运行gradle任务assembleDebug
时,我在Gradle构建消息中得到了这个:
Failed getting releaseKeyStoreFile
debug
而不是release
,也会评估此函数?答案 0 :(得分:1)
您需要区分配置阶段和执行阶段。
在配置阶段中,将评估并执行整个构建脚本。
只有任务操作(由任务类型定义),doFirst
和doLast
闭包在执行阶段中执行。
任务是执行的(显式的还是依赖的)只会影响执行阶段,但它始终会被配置。
您可以调用每项任务,android
关闭中的配置代码将始终执行。
回答你的第二个问题:你的方法必须是自动防故障的(就像现在一样)。将null
返回到storeFile
属性没有问题,因为只有任务(未执行)才会失败。
附加提示:您可以简化方法。无需检查null
和是否为空字符串,您只需检查Groovy的真相即可。您也可以使用三元表达式。
return keyStoreFile ? file(keyStoreFile) : null