基于这个答案,https://stackoverflow.com/a/27908019/5156317,我有一个后续问题:是什么使一个应用程序不同,它代表了产品的味道?我试图将它与我的XCode设置进行比较,如下所示:
我对android系统的想法是:
buildTypes: debug_test debug_production //不需要企业级应用程序,因为在任何设备版本上都有可能没有签名的应用程序
口味: myApp
多谢你们的支持!
发布于 2017-02-03 20:05:00
好吧,为了使用不同的后端,我不会指定比debug
和release
更多的构建类型。相反,我会使用以下一些技巧:
您可以使用BuildConfig
类访问应用程序代码中的生成类型、构建风格和自定义字段。
带有简单风味的方法
- `debug`
- `release`
- `dev`
- `test`
- `live`
这将导致这些构建变体(您不必使用所有这些变量):
devDebug
devRelease
testDebug
testRelease
liveDebug
liveRelease
使用维数结合多种口味的方法
- `backend`
- `target`
- `debug`
- `release`
- `target` dimension:
- `dev`
- `test`
- `live`
- `backend` dimension:
- `production`
- `test`
这将导致这些构建变体(同样,您不必使用所有这些变量):
productionDevDebug
productionDevRelease
productionTestDebug
productionTestRelease
productionLiveDebug
productionLiveRelease
testDevDebug
testDevRelease
testTestDebug
testTestRelease
testLiveDebug
testLiveRelease
使用build字段
在构建类型和构建风格声明中使用附加值,例如:
buildConfigField "boolean", "production_backend", "false"
或
buildConfigField "String", "backend", "\"production\""
发布于 2020-01-31 20:43:53
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"
// Product key
static String FP = "FP"
static String SP = "SP"
}
android {
buildTypes {
debug {}
qa {}
release {}
}
flavorDimensions "client", "backend"
productFlavors {
// First Product (FP)
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'
...
}
// Second Product (SP)
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的编译联系起来,用android的qa进行后端的分阶段,并将后端的生产与android的发布联系起来。请记住,在某些情况下,您需要调试生产环境或混淆开发环境,这个解决方案允许这样做。
编译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.也不能重命名active build变体。
重要:变量的值必须与产品口味的名称相匹配。
总帐
资料来源:
https://stackoverflow.com/questions/42029224
复制相似问题