Gradle构建 - 如果那么可能

时间:2016-10-17 07:04:39

标签: android gradle

在我的开源库中,我使用以下内容:

android {
    compileSdkVersion setup.compileSdk
    buildToolsVersion setup.buildTools

    defaultConfig {
        minSdkVersion setup.minSdk
        targetSdkVersion setup.targetSdk
    }
}

我不想强迫每个人定义这些常量,但我想使用它们,并且我在所有项目和库中使用相同的常量。所以我希望能够使用一个适合我的代码以及其他没有定义这些变量的代码。我正在寻找以下内容:

android {

    // pseudo code line
    if setup is defined 
    {
        compileSdkVersion setup.compileSdk
        buildToolsVersion setup.buildTools

        defaultConfig {
            minSdkVersion setup.minSdk
            targetSdkVersion setup.targetSdk
        }
    }
    // default setup, if the user did not define global constants
    else
    {

        compileSdkVersion 24
        buildToolsVersion "24.0.2"

        defaultConfig {
            minSdkVersion 16
            targetSdkVersion 24
        }
    }
}

这样的事情可能吗?还有其他建议吗?

2 个答案:

答案 0 :(得分:1)

我想您的 setup 变量存储在项目扩展名

project.ext.setup = setup

这样,您可以从项目和所有子项目中访问它

你可以像这样测试设置的存在

if (project.hasProperty('setup'))

如果没有提供

,我们的想法是创建默认的设置 var
if (!project.hasProperty('setup')){
    project.ext.setup = new Setup()
    project.setup.compileSdk = 24
    project.setup.buildTools = "24.0.2"
    project.setup.minSdk = 16
    project.setup.targetSdk = 24
}


android {
 compileSdkVersion project.setup.compileSdk
    buildToolsVersion project.setup.buildTools

    defaultConfig {
        minSdkVersion project.setup.minSdk
        targetSdkVersion project.setup.targetSdk
    }
}

答案 1 :(得分:0)

当然,我已经尝试过这个并且它已成功构建。

android{
...
    if (someCondition){
        compileSdkVersion 23
        buildToolsVersion "23.0.1"
        ...
    }else {
        compileSdkVersion 24
        buildToolsVersion "24.0.3"
        ...
    }
}