android - 使用 elvis 运算符回退 gradle 中的未知属性

标签 android gradle android-gradle-plugin

我想让以下工作:

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/

相关文章:

java - 无法在Android中同一类中的方法之间传递值

android - 更新cordova-android 6.3.0-> 6.4.0 =>未找到Gradle

android - 如何在 Android 中使用 Web View 访问本地主机服务器

android - 如何在 TextInputLayout 的密码切换按钮上禁用涟漪效应

java - Spring Boot JAR 不作为 init.d 服务执行

java - 安装拆分 apk 时出错 : com. android.ddmlib.InstallException:无法完成 session :INSTALL_FAILED_INVALID_APK

android - 找不到方法compile()

firebase - 在最新检查期间无法捕获任务 ':app:preDebugBuild' 属性 'compileManifests' 的输入文件指纹

java - 在 AndEngine 中变换主体时崩溃

spring-boot - Spring Boot 2.x Repackage用于与Gradle的集成测试