2016-10-17 42 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" 
     ... 
    } 
}