假设我有一个在地图上显示位置的应用。 现在我想制作这个应用程序的几个不同版本,一个显示商店,一个显示餐馆等。
在其中一些应用中,我想要包含广告,而在其他应用中我不想。
如何有选择地将某些srcDirs添加到一种风味而不是另一种?我尝试了以下方法:
productFlavors {
Shops {
applicationId "com.me.shops"
ext.hasAds = true
}
Restaurants {
applicationId "com.me.restaurants"
ext.hasAds = false
}
... more flavors with ext.hasAds either true or false
}
applicationVariants.all { variant ->
String withAdsDir = 'src/withAds'
String withoutAdsDir = 'src/withoutAds'
if (variant.productFlavors.get(0).ext.hasAds) {
variant.sourceSets java.srcDir withAdsDir + '/java'
variant.sourceSets res.srcDir withAdsDir + '/res'
}
else {
variant.sourceSets java.srcDir withoutAdsDir + '/java'
variant.sourceSets res.srcDir withoutAdsDir + '/res'
}
}
但是这失败了,因为对于一个,if结构中的语法是不正确的。
我试图避免必须单独指定每种风格的文件夹,因此使用.ext.hasAds布尔值。
如何根据某个布尔值来指定特定的srcDirs?
更新
我已修复'它。意思是我得到了我想要的东西。但我对如何:
感到不满意flavorDimensions "adsornot", "typeofapp"
productFlavors {
Shops {
applicationId "com.me.shops"
ext.hasAds = true
dimension "typeofapp"
}
Restaurants {
applicationId "com.me.restaurants"
ext.hasAds = false
dimension "typeofapp"
}
Ads {
ext.hasAds = true
dimension "adsornot"
}
NoAds {
ext.hasAds = false
dimension "adsornot"
}
}
sourceSets {
String withAdsDir = 'src/withAds'
String withoutAdsDir = 'src/withoutAds'
Ads {
java.srcDir withAdsDir + '/java'
res.srcDir withAdsDir + '/res'
}
NoAds {
java.srcDir withoutAdsDir + '/java'
res.srcDir withoutAdsDir + '/res'
}
}
variantFilter { variant ->
boolean shouldHaveAds = variant.getFlavors().get(0).ext.hasAds
boolean variantHasAds = variant.getFlavors().get(1).ext.hasAds
variant.setIgnore(shouldHaveAds != variantHasAds)
}
说明:
我创建了2个风格维度:app-type和ads-or-not
这意味着将生成4个变体。但我只想要2. variantfilter检查每个变体的2种口味,它们应该匹配ext.hasAds
(在口味中定义)。如果它们不匹配,请忽略此变体。
答案 0 :(得分:0)
如果您使用Android Studio,则app
文件夹包含main
文件夹,其中包含所有配置的默认来源,xmls,资源等。您还可以创建 app / [flavor] 文件夹(例如,app/Shops
,app/Restaurants
)并输入所有指定的风味资源。
例如,您的build.gradle文件包含以下类型:
flavorDimensions "deployment"
productFlavors {
development {
dimension "deployment"
applicationId "com.example.myapp.dev"
buildConfigField "boolean", "USE_ADS", "false"
}
production {
dimension "deployment"
applicationId "com.example.myapp"
buildConfigField "boolean", "USE_ADS", "true"
}
}
要为开发配置创建自定义资源,只需创建 app / development 文件夹即可。它应该与 app / main 具有相同的结构。
之后检查代码中gradle文件中提供的自定义标志:
// check gradle flags
if (BuildConfig.USE_ADS) {
// insert ads
}