如何配置构建类型与产品风格?
How to configure build types vs. product flavors?
基于这个答案我有一个跟进问题:是什么让一个应用程序与众不同,说明产品口味?我正在尝试将其与我的 XCode 设置进行比较,如下所示:
- 使用测试后端的开发应用程序
- 使用生产后端的开发应用程序
- 使用测试后端的测试应用(企业分发)
- 使用生产后端的测试应用(企业分发
- 使用生产后端(应用商店分发)的实时应用
我对 android 设置的看法:
构建类型:
debug_test
debug_production
// 不需要企业应用程序,因为在任何设备上都可以使用未签名的应用程序
发布
口味:
我的应用
感谢您的支持!
好吧,为了使用不同的后端,我不会指定比 debug
和 release
更多的构建类型。
相反,我会使用其中的一些技巧:
您可以使用 BuildConfig
class.
在应用程序代码中访问构建类型、构建风格和自定义字段
采用简单风格的方法
构建类型:
debug
release
口味:
dev
test
live
这会导致这些构建变体(您不必使用所有变体):
devDebug
devRelease
testDebug
testRelease
liveDebug
liveRelease
使用维度组合多种口味的方法
风味维度:
backend
target
构建类型:
debug
release
口味:
target
维度:
dev
test
live
backend
维度:
production
test
这会导致这些构建变体(同样,您不必使用所有变体):
productionDevDebug
productionDevRelease
productionTestDebug
productionTestRelease
productionLiveDebug
productionLiveRelease
testDevDebug
testDevRelease
testTestDebug
testTestRelease
testLiveDebug
testLiveRelease
使用构建字段
在构建类型和构建风格声明中使用附加值,例如:
buildConfigField "boolean", "production_backend", "false"
或
buildConfigField "String", "backend", "\"production\""
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 的编译相关联,将后端的暂存与 qa android 以及后端的生产与发布 android。请记住,在某些情况下您需要调试生产环境或混淆开发环境,此解决方案允许。
- 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。也不能重命名活动构建变体。
IMPORTANT: The values of the variables must match the names of the
products flavors
GL
来源:
- Build Variants
- Exclude specific build variants
基于这个答案
- 使用测试后端的开发应用程序
- 使用生产后端的开发应用程序
- 使用测试后端的测试应用(企业分发)
- 使用生产后端的测试应用(企业分发
- 使用生产后端(应用商店分发)的实时应用
我对 android 设置的看法:
构建类型: debug_test debug_production // 不需要企业应用程序,因为在任何设备上都可以使用未签名的应用程序 发布
口味: 我的应用
感谢您的支持!
好吧,为了使用不同的后端,我不会指定比 debug
和 release
更多的构建类型。
相反,我会使用其中的一些技巧:
您可以使用 BuildConfig
class.
采用简单风格的方法
构建类型:
debug
release
口味:
dev
test
live
这会导致这些构建变体(您不必使用所有变体):
devDebug
devRelease
testDebug
testRelease
liveDebug
liveRelease
使用维度组合多种口味的方法
风味维度:
backend
target
构建类型:
debug
release
口味:
target
维度:dev
test
live
backend
维度:production
test
这会导致这些构建变体(同样,您不必使用所有变体):
productionDevDebug
productionDevRelease
productionTestDebug
productionTestRelease
productionLiveDebug
productionLiveRelease
testDevDebug
testDevRelease
testTestDebug
testTestRelease
testLiveDebug
testLiveRelease
使用构建字段
在构建类型和构建风格声明中使用附加值,例如:
buildConfigField "boolean", "production_backend", "false"
或
buildConfigField "String", "backend", "\"production\""
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 的编译相关联,将后端的暂存与 qa android 以及后端的生产与发布 android。请记住,在某些情况下您需要调试生产环境或混淆开发环境,此解决方案允许。
- 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。也不能重命名活动构建变体。
IMPORTANT: The values of the variables must match the names of the products flavors
GL
来源:
- Build Variants
- Exclude specific build variants