2016-01-22 58 views
0

我有一個包含多個產品變體的項目。 目前我使用下面的方法來指定我是否要包括特定的功能 - 在我的build.gradle文件的末尾我這樣做:build.gradle:有條件地包含產品變體中的功能

productFlavors 
{ 
    customapp1 { 
     applicationId "com.app.id1" 
    }, 
    customapp2 { 
     applicationId "com.app.id2" 
    }, 
    .... 
} 
if(extensions_ads) { 
dependencies { 
    println "Adding ads dependencies" 
    compile 'com.google.android.gms:play-services-ads:8.3.0' 
} 

android.sourceSets.main { 
    java.srcDirs += ['./src/extensions/ads']; 
} 
} 
else{ 
    android.sourceSets.main { 
     java.srcDirs += ['./src/extensions/noads']; 
    } 
} 

正如你看到extensions_ads是一個全局變量,我想有這樣的:

productFlavors 
{ 
    customapp1 { 
     extensions_ads true 
     applicationId "com.app.id1" 
    }, 
    customapp1 { 
     extensions_ads false 
     applicationId "com.app.id1" 
    } 
} 
  1. 我應該如何界定extensions_ads是味道定義的一部分。
  2. 如何遍歷所有味道並檢查該標誌?

回答

0

我會按照另一個邏輯來規定你的依賴關係或源碼集資源。

您可以僅爲風格,buildType或buildVariant添加依賴關係。

例如:

dependencies { 
    flavor1Compile 'com.google.android.gms:play-services-ads:8.3.0' 
} 

在你可以使用不同的文件夾針對每種口味,而不需要在您的build.gradle文件中指定android.sourceSets以同樣的方式。

+ src 
    + main 
     + java 
     + res 
    + flavor1 
     + java 
     + res 
    + flavor2 
     + java 
     + res 

當然,如果這還不夠,你可以爲一個味道指定android.sourceSets,somenthing像:

sourceSets{ 
     main { 
      // 
     } 

     flavor1.java.srcDirs = [ ...] 
     flavor1.res.srcDirs = [ ... ] 
     ... 

     flavor2.java.srcDirs = [...] 
     flavor2.res.srcDirs = [...] 
     ... 
    } 
+0

看起來不錯,但我的口味太多,再加上我們有一個腳本,它們可以自動添加到build.gradle文件中。我更喜歡某種遍歷所有的風味,而不是手動爲每種風味「硬編碼」srcDirs。 –