我继承了一个在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等风味。
所以要明确我的最终目标是为一个名为france的新国家提供产品口味,因为我已经在android studio中粘贴了所有代码。
更新:让我更准确地说明我的愿望和问题。看看目前的产品口味:mock,qa,qaInternal,beta和prod。他们都预先了解有关美国建筑的信息。这已存在于代码中。 该代码目前是为美国客户构建的。现在我被要求为法国客户提供代码,所以我需要法语版本。
问题就像applicationID一样,很多buildConfigField在法语版本中会有所不同。我怎样才能设计出一个解决方案,例如法国模拟,法国qa,法国qaInternal,法国测试版和法国产品,就像我目前在美国建造一样?
这个问题与locale无关,只是说我们有两种产品是美国产品,而我们想要一种法国产品,它的配置与美国不同。
以模拟味道为例。对于法语我需要这样做:
mock {
applicationId "french-com.example.mock"
versionName = versionOverride + 'french-mock'
buildConfigField STRING, BASE_ENDPOINT, '"mock://localhost/french-gt"'
}
答案 0 :(得分:2)
如果您为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与dimension& buildtype的组合,在这种情况下,它将是mockUsa,mockFrance,qaUsa,qaFrance等。
鉴于存在实际构建类型debug
和release
的事实,您最终可能会有大量变体!
答案 1 :(得分:0)
我认为你应该创建多个buildType
而不是口味。
如果你有构建类型法国和美国,以及flavors mock,qa和...,那么你将拥有这些构建变体:qaUSA,qaFrance,mockUSA,mockFrance等。
这里是build.gradle
示例:
productFlavors {
mock {
...
}
qa {
...
}
}
buildTypes {
USA {
...
}
France {
...
}
}