In Multi Flavour app, how to avoid duplicate resources

4.5k Views Asked by At

If I have 3 flavors flavor1, flavor2 and flavour3, each flavor has Dev,Pat and Prod "sub-flavours" versions which different parameters , but each main flavor have different resources.

So I have now 9 different flavors, but only 3 different resource folders). I would like the same "sub-flavors" to use the same resources.

How can I do that? I have seen in the documentation about the flavorDimensions but not sure how to configure the resource folder.

At the moment I am using something like

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'
        }

}    
2

There are 2 best solutions below

1
On BEST ANSWER

You need Gradle flavours eg. flavor1, flavor2 etc, as well as Build Types like dev, prod etc.

See the example from: 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

For example:

android.sourceSets.flavor1Debug Location src/flavor1Debug/

android.sourceSets.flavor1Release Location src/flavor1Release/

android.sourceSets.flavor2Debug Location src/flavor2Debug/

android.sourceSets.flavor2Release Location src/flavor2Release/

Also, this question is very similar How can I specify per flavor buildType sourceSets?

2
On

Just put common resources in the main/res. All the resources in the main/res will be overridden by the flavour. For example if you want to override string resources add,

main string file: /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">[email protected]</string>
    <string name="app_phone">123</string>
    <string name="app_website">www.abc.com</string>
</resources>

and flavour string file: /src/flavor1/res/values/strings.xml

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

Only app_name is going to changed in the flavour and other resources like app_full_name is still accessible in all flavours.