使用Elvis运算符对Gradle中的未知属性进行回退

时间:2018-12-12 08:16:01

标签: android gradle android-gradle

我想得到以下工作:

android {
    compileSdkVersion setup?.compileSdk ?: 28
}

但是,如果未定义安装程序,则不会发生以下异常:

  

无法获取类型为com.android.build.gradle.LibraryExtension的对象的未知属性“ setup”。

所以我可以将其重写为以下内容,这将起作用:

android {
    compileSdkVersion hasProperty('setup') ? setup.compileSdk ?: 28 : 28
}

问题

如果使用此选项,则必须定义两次后备(SDK版本28),以用于未定义设置以及不存在查询的子属性的情况。

有什么更好的方法可以使它工作?

1 个答案:

答案 0 :(得分:0)

最后,我发现访问不存在的属性不会返回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
    }
}