build.gradle
class Globals {
static String devDebug = "_devDebug"
static String devRelease = "_devRelease"
static String stagingQA = "_stagingQa"
static String prodRelease = "_prodRelease"
static String prodDebug = "_prodDebug"
def firstproduct = "firstproductFP"
def secondproduct = "secondproductFP"
static String FP = "FP"
static String SP = "SP"
}
android {
buildTypes {
debug {}
qa {}
release {}
}
flavorDimensions "client", "backend"
productFlavors {
FP_dev {
dimension 'backend'
buildConfigField("String", "TEST", "\"FP_dev\"")
}
FP_staging {
dimension 'backend'
buildConfigField("String", "TEST", "\"FP_staging\"")
}
FP_prod {
dimension 'backend'
buildConfigField("String", "TEST", "\"FP_prod\"")
}
firstproduct {
dimension 'client'
...
}
SP_dev {
dimension 'backend'
buildConfigField("String", "TEST", "\"SP_dev\"")
}
SP_staging {
dimension 'backend'
buildConfigField("String", "TEST", "\"SP_staging\"")
}
SP_prod {
dimension 'backend'
buildConfigField("String", "TEST", "\"SP_prod\"")
}
secondproduct {
dimension 'client'
...
}
}
variantFilter {
variant ->
def needed = variant.name in [
Globals.firstproduct + Globals.FP + Globals.devDebug,
Globals.firstproduct + Globals.FP + Globals.stagingQA,
Globals.firstproduct + Globals.FP + Globals.prodRelease,
Globals.secondproduct + Globals.FP + Globals.devDebug,
Globals.secondproduct + Globals.FP + Globals.stagingQA,
Globals.secondproduct + Globals.FP + Globals.prodRelease
]
variant.setIgnore(!needed)
}
}
这种解决方案的方法允许多个产品风格的客户端编译和后端环境。我的做法是将后端的开发环境与Android调试编译相关联,将后端的staging环境与Android的qa相关联,将后端的生产环境与Android的release相关联。请注意,有时您需要在生产环境中进行调试或混淆开发环境,这个解决方案可以实现。以下是需要翻译的内容:
- firstproductFP_devDebug
- firstproductFP_stagingQa
- firstproductFP_prodRelease
- secondproductSP_devDebug
- secondproductSP_stagingQa
- secondproductSP_prodRelease
编译firstproductFP_devDebug的示例:
BuildConfig.java
public static final String FLAVOR = "firstproductFP_dev";
public static final String FLAVOR_client = "firstproduct";
public static final String FLAVOR_backend = "FP_dev";
public static final String BUILD_TYPE = "debug";
需要注意的是,在variantFilter
范围内,您不能使用buildConfigField()
根据构建类型和产品风味编译值。这迫使我们使用flavorDimensions和更多数量的productsFlavors。同时也不能重命名活动构建变体。
重要提示:变量的值必须与产品风味的名称匹配。
GL
参考来源: