Issue
I have an Android with multiple productFlavors
. I'd like the android:label
for the debug build of, for example flavor1
, to say Flavor1 Debug
and the release build to say Flavor1
.
Without productFlavors
this is relatively simple, just create a different string
resource in the debug and release source folders but with productFlavors
, I don't want to be creating flavor1Debug
, flavor2Debug
, etc. folders for each flavor with just one string
resource in there.
Is there a way to do this ? I'm guessing it requires merging resources somehow but am not sure how.
For extra points, it would be awesome if I could add an overlay to the app icon i.e. merge two images but I realize that might be taking it too far.
Solution
I worked out a solution for this. Basically, you use the following method that copies read the build file, modifies the property value, then rewrites the files.
def debugAppRename(variant, labelResource) {
def flavor = variant.productFlavors.get(0)
def buildtype = variant.buildType
// Append buildType name to app label
if(buildtype.debuggable) {
variant.mergeResources << {
def valuesFile = "$buildDir/res/all/${flavor.name}/${buildtype.name}/values/values.xml"
def values = (new XmlParser()).parse(valuesFile)
values.string.each { m->
if (m.@name == labelResource) {
m.value = m.text() + " " + buildtype.name.capitalize()
new XmlNodePrinter(new PrintWriter(new FileWriter(valuesFile)))
.print(values)
}
}
}
}
}
The way to use it is:
applicationVariants.all { variant ->
debugAppRename(variant, 'app_name') // where `app_name` is the string resource you use for the `app:label` property in your AndroidManifest.xml
}
The resulting app will have the buildType name appended to it if it is a debuggable buildType, for e.g. My App Debug
, My App Staging
, etc. The release
build remains unaffected.
I also put it up on a gist
.
You can apply it in your build.gradle
using the apply from:
directive with the raw gist URL or copy the above to your code (personally I find build scripts become too large so I prefer applying from).
Answered By - Saad Farooq
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.