我想让以下工作:
android {
compileSdkVersion setup?.compileSdk ?: 28
}
但是如果未定义设置,这确实会失败并出现以下异常:
Could not get unknown property 'setup' for the object of type com.android.build.gradle.LibraryExtension.
所以我可以将其重写为以下内容,这将起作用:
android {
compileSdkVersion hasProperty('setup') ? setup.compileSdk ?: 28 : 28
}
问题
如果我使用它,我必须定义回退(SDK 版本 28)两次,用于未定义设置的情况以及查询的子属性不存在的情况。
有什么更好的方法来让它工作吗?
最佳答案
最后发现访问不存在的属性不返回null反而报错...
我能找到的最佳解决方案如下:
- 不要使用 elvis 运算符
- 如果找不到属性,请使用
hasProperty
并定义默认值
示例
// define default setup if none is provided
if (!hasProperty('setup'))
{
ext {
setup = [
compileSdk: 28,
enableDataBinding: true,
minSdk : 16,
targetSdk : 28
]
}
}
android {
compileSdkVersion setup.compileSdk
defaultConfig {
minSdkVersion setup.minSdk
targetSdkVersion setup.targetSdk
}
}
关于android - 使用 elvis 运算符回退 gradle 中的未知属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53738705/