In Multi Flavour app, how to avoid duplicate resources
Asked Answered
C

2

6

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

}    
Conscription answered 8/2, 2016 at 17:8 Comment(2)
Yeah it works but I would like to know how to use the flavorDimensions , or if there is any other way to do it.Conscription
You can exclude resources from different flavor builds, check this #33264067Patentor
C
1

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?

Conceited answered 8/2, 2016 at 17:31 Comment(1)
Any idea on how to do it with flavorDimension ? tools.android.com/tech-docs/new-build-system/…Conscription
D
-2

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.

Disenthral answered 15/3, 2016 at 19:13 Comment(2)
You cannot use main and expect it to be overridden. This will not work. Main should be used for "in everything", else it needs to be separated.Shockproof
@StarWind has a point here this will fail at compile time with "duplicate resources"Starlin

© 2022 - 2024 — McMap. All rights reserved.