2016-10-17 43 views
0

在我的一个开源库,我使用类似以下内容:摇篮建设 - 如果然后其他人可能

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 
     } 
    } 
} 

是这样的可能吗?有其他建议吗?

回答

1

我想象你设置变量存储在项目延期

project.ext.setup = setup 

通过这种方式,它可以从您的项目访问,所有的子项目

您可以测试是否存在像这样的设置

if (project.hasProperty('setup')) 

的想法是创建一个默认设置变种,如果没有人提供

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 
    } 
} 
+0

就是这样。这有效,谢谢 – prom85

+0

'新的设置()'=>这一行不起作用。我不需要它,现在我想用这个方法定义一个用户变量。任何想法我失踪? – prom85

+0

我写了“新的安装程序()”,但这是你自己的课程。我不知道你是如何定义它的。 – Bipi

0

当然,我已经试过这样做,它成功地建造。

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