How to set versionName in APK filename using gradle? How to set versionName in APK filename using gradle? android android

How to set versionName in APK filename using gradle?


I only have to change the version name in one place. The code is simple too.

The examples below will create apk files named named MyCompany-MyAppName-1.4.8-debug.apk or MyCompany-MyAppName-1.4.8-release.apk depending on the build variant selected.

Note that this solution works on both APK and App Bundles (.aab files).

See Also: How to change the proguard mapping file name in gradle for Android project

#Solution for Recent Gradle Plugin

android {    compileSdkVersion 22    buildToolsVersion "22.0.1"    defaultConfig {        applicationId "com.company.app"        minSdkVersion 13        targetSdkVersion 21        versionCode 14       // increment with every release        versionName '1.4.8'   // change with every release        setProperty("archivesBaseName", "MyCompany-MyAppName-$versionName")    }}

The above solution has been tested with the following Android Gradle Plugin Versions:

  • 3.6.4 (August 2020)
  • 3.5.2 (November 2019)
  • 3.3.0 (January 2019)
  • 3.1.0 (March 2018)
  • 3.0.1 (November 2017)
  • 3.0.0 (October 2017)
  • 2.3.2 (May 2017)
  • 2.3.1 (April 2017)
  • 2.3.0 (February 2017)
  • 2.2.3 (December 2016)
  • 2.2.2
  • 2.2.0 (September 2016)
  • 2.1.3 (August 2016)
  • 2.1.2
  • 2.0.0 (April 2016)
  • 1.5.0 (2015/11/12)
  • 1.4.0-beta6 (2015/10/05)
  • 1.3.1 (2015/08/11)

I'll update this post as new versions come out.

#Solution Tested Only on versions 1.1.3-1.3.0The following solution has been tested with the following Android Gradle Plugin Versions:

  • 1.3.0 (2015/07/30) - Not Working, bug scheduled to be fixed in 1.3.1
  • 1.2.3 (2015/07/21)
  • 1.2.2 (2015/04/28)
  • 1.2.1 (2015/04/27)
  • 1.2.0 (2015/04/26)
  • 1.2.0-beta1 (2015/03/25)
  • 1.1.3 (2015/03/06)

app gradle file:

apply plugin: 'com.android.application'android {    compileSdkVersion 21    buildToolsVersion "21.1.2"    defaultConfig {        applicationId "com.company.app"        minSdkVersion 13        targetSdkVersion 21        versionCode 14       // increment with every release        versionName '1.4.8'   // change with every release        archivesBaseName = "MyCompany-MyAppName-$versionName"    }}


This solved my problem: using applicationVariants.all instead of applicationVariants.each

buildTypes {      release {        signingConfig signingConfigs.release        applicationVariants.all { variant ->            def file = variant.outputFile            variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))         }    }       }

Update:

So it seems this does not work with 0.14+ versions of android studio gradle plugin.

This does the trick (Reference from this question ) :

android {    applicationVariants.all { variant ->        variant.outputs.each { output ->            output.outputFile = new File(                    output.outputFile.parent,                    output.outputFile.name.replace(".apk", "-${variant.versionName}.apk"))        }    }}


(EDITED to work with Android Studio 3.0 and Gradle 4)

I was looking for a more complex apk filename renaming option and I wrote this one in the hope it is helpfull for anyone else. It renames the apk with the following data:

  • flavor
  • build type
  • version
  • date

It took me a bit of research in gradle classes and a bit of copy/paste from other answers. I am using gradle 3.1.3.

In the build.gradle:

android {    ...    buildTypes {        release {            minifyEnabled true            ...        }        debug {            minifyEnabled false        }    }    productFlavors {        prod {            applicationId "com.feraguiba.myproject"            versionCode 3            versionName "1.2.0"        }        dev {            applicationId "com.feraguiba.myproject.dev"            versionCode 15            versionName "1.3.6"        }    }    applicationVariants.all { variant ->        variant.outputs.all { output ->            def project = "myProject"            def SEP = "_"            def flavor = variant.productFlavors[0].name            def buildType = variant.variantData.variantConfiguration.buildType.name            def version = variant.versionName            def date = new Date();            def formattedDate = date.format('ddMMyy_HHmm')            def newApkName = project + SEP + flavor + SEP + buildType + SEP + version + SEP + formattedDate + ".apk"            outputFileName = new File(newApkName)        }    }}

If you compile today (13-10-2016) at 10:47, you get the following file names depending on the flavor and build type you have choosen:

  • dev debug: myProject_dev_debug_1.3.6_131016_1047.apk
  • dev release: myProject_dev_release_1.3.6_131016_1047.apk
  • prod debug: myProject_prod_debug_1.2.0_131016_1047.apk
  • prod release: myProject_prod_release_1.2.0_131016_1047.apk

Note: the unaligned version apk name is still the default one.