Reputation: 15054
I have 3 product flavors excluding the main
one:
productFlavors {
xxx {
applicationId 'com.xxx'
}
yyy {
applicationId 'com.yyy'
}
zzz {
applicationId 'com.zzz'
}
}
As I understand it, these product flavors inherit main
's resources and it looks something like this:
+------->xxx
|
main----+------->yyy
|
+------->zzz
So when I build xxx
, Gradle bundles stuff from src/main
and from src/xxx
folders.
Now, I need it to look like this:
+------->xxx
|
main----+------->yyy------->zzz
In other words, I want zzz
to use yyy
's resources as well as main
's. Can Gradle do this?
Upvotes: 11
Views: 3221
Reputation: 1016
I have answered this in another thread. I will just copy and paste my answer here, hoping it will be helpful to you.
I was looking for a similar thing in gradle and found Multi-flavor variants. I have an app that should have versions A and B, and each version has dev and pro environments, so I ended up with this in my gradle:
flavorDimensions 'app', 'environment'
productFlavors {
versionA {
flavorDimension 'app'
}
versionB {
flavorDimension 'app'
}
pre {
flavorDimension 'environment'
}
pro {
flavorDimension 'environment'
}
}
And in my build variants I have versionAPreDebug, versionAPreRelease, versionBPreDebug, versionBPreRelease, etc. I think what you need is something like that.
Upvotes: 3
Reputation: 125
It may depends on what exactly you want to "override" in zzz. In my project I need productFlavor inheritance too. But I needed override manifest only. I created directory for zzz with custom AndroidManifest.xml and changed other zzz src paths to yyy in build.gradle:
sourceSets {
zzz.java.srcDirs = ['src/yyy/java']
zzz.res.srcDirs = ['src/yyy/res']
...
...
}
productFlavors {
xxx {}
yyy {}
zzz {}
}
P.S. Created a feature request for this https://code.google.com/p/android/issues/detail?id=183350
Upvotes: 5