Android gradle插件 - 国家/地区的风味尺寸

时间:2015-06-24 21:06:33

标签: android android-studio android-gradle build.gradle android-productflavors

我继承了一个在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"'
    }

2 个答案:

答案 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等。

鉴于存在实际构建类型debugrelease的事实,您最终可能会有大量变体!

答案 1 :(得分:0)

我认为你应该创建多个buildType而不是口味。 如果你有构建类型法国和美国,以及flavors mock,qa和...,那么你将拥有这些构建变体:qaUSA,qaFrance,mockUSA,mockFrance等。

这里是build.gradle示例:

productFlavors {
        mock {
             ...
        }
        qa {
            ...
        }
    }

buildTypes {
        USA {
            ...
        }

        France {
            ...
        }
    }