Multi Flavor 应用中,如何避免重复资源

In Multi Flavour app, how to avoid duplicate resources

如果我有 3 个口味 flavor1、flavor2 和 flavor3,每个口味都有 Dev、Pat 和 Prod "sub-flavours" 版本,参数不同,但每个主要口味有不同的资源。

所以我现在有 9 种不同的风格,但只有 3 个不同的资源文件夹)。我希望相同的 "sub-flavors" 使用相同的资源。

我该怎么做?我在文档中看到了有关 flavorDimensions 的内容,但不确定如何配置资源文件夹。

目前我正在使用

sourceSets {

   flavor1_dev{
            res.srcDir  'src/flavor1/res'
        }

   flavor1_prod{
            res.srcDir  'src/flavor1/res'
        }

   flavor2_dev{
            res.srcDir  'src/flavor2/res'
        }

   flavor2_prod{
            res.srcDir  'src/flavor2/res'
        }

}    

您需要 Gradle 种口味,例如。 flavor1flavor2 等,以及 devprod 等构建类型

示例来自:http://developer.android.com/tools/building/configuring-gradle.html and http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Sourcesets-and-Dependencies

例如:

android.sourceSets.flavor1Debug 位置 src/flavor1Debug/

android.sourceSets.flavor1Release 位置 src/flavor1Release/

android.sourceSets.flavor2Debug 位置 src/flavor2Debug/

android.sourceSets.flavor2Release 位置 src/flavor2Release/

另外,这个问题很相似How can I specify per flavor buildType sourceSets?

只需将常用资源放在main/res。 main/res 中的所有资源都将被风格覆盖。 例如,如果你想覆盖字符串资源添加,

主要字符串文件:/src/main/res/values/strings.xml

<resources>
    <string name="app_name">Main</string>
    <string name="app_name_full">Main app</string>
    <string name="app_email">main@abc.com</string>
    <string name="app_phone">123</string>
    <string name="app_website">www.abc.com</string>
</resources>

和风味字符串文件:/src/flavor1/res/values/strings.xml

<resources>
    <string name="app_name">Flavour App Name</string>
</resources>

只有 app_name 的风格会发生变化,其他资源如 app_full_name 仍然可以在所有风格中访问。