Approach to variant builds

I have always done variant builds using submodules and fiddling with the source sets so all modules used the same input source and just build it differently. The Android plugin has flavours that do this. Is something like this coming (has come) to general Gradle, or is using submodules still the right thing to do?