Android build.gradle:在产品变体中有条件地包含功能
我有一个项目与几个产品的变种。 目前,我正在使用以下方法指定是否要包含特定功能-在build.gradle文件的末尾,我执行以下操作:Android build.gradle:在产品变体中有条件地包含功能,android,gradle,android-gradle-plugin,android-productflavors,Android,Gradle,Android Gradle Plugin,Android Productflavors,我有一个项目与几个产品的变种。 目前,我正在使用以下方法指定是否要包含特定功能-在build.gradle文件的末尾,我执行以下操作: productFlavors { customapp1 { applicationId "com.app.id1" }, customapp2 { applicationId "com.app.id2" }, .... } if(extensions_ads) { dependencies
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'];
}
}
正如您所看到的,ads是一个全局变量,我希望有如下内容:
productFlavors
{
customapp1 {
extensions_ads true
applicationId "com.app.id1"
},
customapp1 {
extensions_ads false
applicationId "com.app.id1"
}
}
sourceSets{
main {
//
}
flavor1.java.srcDirs = [ ...]
flavor1.res.srcDirs = [ ... ]
...
flavor2.java.srcDirs = [...]
flavor2.res.srcDirs = [...]
...
}
我将遵循另一种逻辑来限制依赖项或源集资源 您只能为一种风格、一种构建类型或一种构建变体添加依赖项 例如:
dependencies {
flavor1Compile 'com.google.android.gms:play-services-ads:8.3.0'
}
同样,您可以为每种口味使用不同的文件夹,而无需在build.gradle
文件中指定android.sourceset
+ src
+ main
+ java
+ res
+ flavor1
+ java
+ res
+ flavor2
+ java
+ res
当然,如果这还不够,您可以为一种口味指定android.sourceset,例如:
productFlavors
{
customapp1 {
extensions_ads true
applicationId "com.app.id1"
},
customapp1 {
extensions_ads false
applicationId "com.app.id1"
}
}
sourceSets{
main {
//
}
flavor1.java.srcDirs = [ ...]
flavor1.res.srcDirs = [ ... ]
...
flavor2.java.srcDirs = [...]
flavor2.res.srcDirs = [...]
...
}
看起来不错,但是我的口味太多了,而且我们有一个脚本,可以在build.gradle文件中自动添加它们。我更喜欢对所有味道进行某种遍历,而不是手动对每个味道的srcdir进行“硬编码”。