我继承了一个在gradle构建文件中设置了以下风格的项目:
productFlavors {
def STRING = "String"
def BOOLEAN = "boolean"
def TRUE = "true"
def FALSE = "false"
def BASE_ENDPOINT = "BASE_ENDPOINT"
mock {
applicationId "com.example.myapp.mock"
buildConfigField STRING, BASE_ENDPOINT, '"mock://localhost/gt"'
}
qa {
applicationId "ca.example.myapp"
buildConfigField STRING, BASE_ENDPOINT, '"https://qa-somesite.com/gt"'
}
qaInternal {
applicationId ".ca.example.myapp.int"
buildConfigField STRING, BASE_ENDPOINT, '"https://internal-somesite.com/gt"'
}
beta {
applicationId "com.example.myapp.beta"
buildConfigField STRING, BASE_ENDPOINT, '"https://somesite.com/gt"'
}
prod {
applicationId "ca.ca.example.myapp"
buildConfigField STRING, BASE_ENDPOINT, '"https://somesite.com/gt"'
}
}没有什么特别的事情发生在那里,只有生产qa,嘲弄等口味。
不过,这只是为了一个特定的国家。是给美国的。所以这些口味都是为美国准备的。我需要使用同样的应用程序。我想为另一个叫法国的国家创造口味。法国的口味有不同的结构。
我在想我可以做这样的事:
flavorDimensions "country","buildtype"为我提供乡村口味。但是,我将如何为新的国家创造自己的模拟,qa,qaInternal等口味。
因此,为了明确我的最终目标,我的最终目标是为一个名为法国的新国家提供产品口味,考虑到我在android工作室中粘贴的代码。
更新:让我更准确地说明我想要什么和问题。看看目前的产品口味:模拟、qa、qaInternal、beta和prod。它们都与有关美国产品的信息有关。这在代码中已经存在。当前为美国客户构建的代码。现在,我被要求将代码也提供给法国客户,所以我需要一个法语版本。
问题是像applicationID这样的东西,许多buildConfigField在法国的构建中会有所不同。我如何设计一个解决方案,例如,我可以有一个法国模拟,一个法国qa,一个法国qaInternal,一个法语测试版,和一个法国产品,就像我目前对美国的构建一样?
这个问题与地区无关,只是我们有两个产品,一个美国产品,我们想要一个法国产品,将有一个不同的配置与美国。
以模拟口味为例。对于法语来说,我需要这样做:
mock {
applicationId "french-com.example.mock"
versionName = versionOverride + 'french-mock'
buildConfigField STRING, BASE_ENDPOINT, '"mock://localhost/french-gt"'
}发布于 2015-06-24 21:28:42
如果将一个flavorDimension分配给每个productFlavor,那么您正在做的事情就会奏效。所以在你的例子中,build.gradle看起来就像
flavorDimensions "country","buildtype"
productFlavors {
def STRING = "String"
def BOOLEAN = "boolean"
def TRUE = "true"
def FALSE = "false"
def BASE_ENDPOINT = "BASE_ENDPOINT"
mock {
dimension 'buildtype'
applicationId "com.example.myapp.mock"
versionName = versionOverride + '-mock'
buildConfigField STRING, BASE_ENDPOINT, '"mock://localhost/gt"'
}
qa {
dimension 'buildtype'
applicationId "ca.example.myapp"
versionName = versionOverride + '-qa'
buildConfigField STRING, BASE_ENDPOINT, '"https://qa-somesite.com/gt"'
}
qaInternal {
dimension 'buildtype'
applicationId ".ca.example.myapp.int"
versionName = versionOverride + '-qaInt'
buildConfigField STRING, BASE_ENDPOINT, '"https://internal-somesite.com/gt"'
}
beta {
dimension 'buildtype'
applicationId "com.example.myapp.beta"
versionName = versionOverride + '-beta'
buildConfigField STRING, BASE_ENDPOINT, '"https://somesite.com/gt"'
}
prod {
dimension 'buildtype'
applicationId "ca.ca.example.myapp"
versionName = versionOverride + '-prod'
buildConfigField STRING, BASE_ENDPOINT, '"https://somesite.com/gt"'
}
usa {
dimension 'country'
// whatever else you want
}
france {
dimension 'country'
// whatever else you want
}
}设置了flavorDimensions之后,您现在将使用productFlavors与维度和构建类型的组合,在本例中,将是mockUsa、mockFrance、qaUsa、qaFrance等。
考虑到存在实际的构建类型debug和release,您可能会得到大量的变体列表!
发布于 2015-06-25 06:07:05
我认为您应该创建多个buildType,而不是口味。如果您有构建类型法国和美国,口味模拟,qa和.,那么您将有这些构建变体: qaUSA,qaFrance,mockUSA,mockFrance等等。
下面是build.gradle示例:
productFlavors {
mock {
...
}
qa {
...
}
}
buildTypes {
USA {
...
}
France {
...
}
} https://stackoverflow.com/questions/31037041
复制相似问题