有没有一种方法与gradle中的buildConfigField和resValue公共部分?

我有一个产品有多种产品口味,如:

buildTypes { debug { } release { } } productFlavors { flavor1 { buildConfigField "String" "country" "se" buildConfigField "String" "language" "sv-SE" buildConfigField "String" "appName" "Flavor1" } flavor2 { buildConfigField "String" "country" "se" buildConfigField "String" "language" "sv-SE" buildConfigField "String" "appName" "Flavor2" } flavor3 { buildConfigField "String" "country" "se" buildConfigField "String" "language" "sv-SE" buildConfigField "String" "appName" "Flavor3" } flavor4 { buildConfigField "String" "country" "se" buildConfigField "String" "language" "sv-SE" buildConfigField "String" "appName" "Flavor4" } flavor5 { buildConfigField "String" "country" "se" buildConfigField "String" "language" "no-NO" buildConfigField "String" "appName" "Flavor5" } } 

我更喜欢所有属性的公共部分,只重写那些不同的部分。 这可能吗?

我也想把所有的味道(也许buildTypes)放在它自己的文件中,使它更具可读性。 所以,每当你必须改变一个风格,你可以很容易地find它在自己的文件,而不必滚动上千行,这将是如果我有所有的味道和buildtype与所有其余的主构build文件。

Selvin是正确的,使用defaultConfigclosures – 没有更好的方法! 在下面的例子中,风格1,2和5将默认的国家和语言设置为de 。 Flavors 3&4用他们自己的语言来覆盖它。

 defaultConfig { buildConfigField "String", "country", "de" buildConfigField "String", "language", "de" } buildTypes { debug { } release { } } productFlavors { flavor1 { buildConfigField "String", "appName", "Flavor1" } flavor2 { buildConfigField "String", "appName", "Flavor2" } flavor3 { buildConfigField "String", "country", "uk" buildConfigField "String", "language", "en_GB" buildConfigField "String", "appName", "Flavor3" } flavor4 { buildConfigField "String", "country", "fr" buildConfigField "String", "language", "fr" buildConfigField "String", "appName", "Flavor4" } flavor5 { buildConfigField "String", "appName", name.capitalize() } } 

注意

只是一个可以使用name.capitalize()通过使用capitalize()方法 – 这将大写string中的第一个字符的任何味道名称,例如flavor5 ,转换成flavor5的应用程序名称。 但是,这必须在味道,而不是defaultConfig