I have found similar questions but nothing that quite works for what I want to do. I\'m developing with Android Studio and gradle, and I have several flavors in my build file,
kcoppock's answer is correct, but there is a small typo. It should be:
android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(output.outputFile.parentFile,
output.outputFile.name.replace(".apk", "${variant.versionName}.apk"));
}
}
}
(I wrote this as an answer because I don't have the reputation to make a comment)
EDIT: For modern versions of the Gradle tools, use @ptx's variation (use output.outputFile
in place of variant.outputFile
:
android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(output.outputFile.parentFile,
output.outputFile.name.replace(".apk", "${variant.versionName}.apk"));
}
}
}
As of Gradle tools plugin version 0.14, you should start using the following instead to properly support multiple output files (e.g. APK Splits):
android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
variant.outputFile = new File(variant.outputFile.parentFile,
variant.outputFile.name.replace(".apk", "${variant.versionName}.apk"));
}
}
}
For older versions:
Yeah, we do this in our app. Just add the following in your android tag in build.gradle:
android {
applicationVariants.all { variant ->
def oldFile = variant.outputFile
def newPath = oldFile.name.replace(".apk", "${variant.versionName}.apk")
variant.outputFile = new File(oldFile.parentFile, newPath)
}
}