How to change apk name by using gradle like this format?

AndroidGradle

Android Problem Overview


I'd like to change "app-release.apk" file name to like following when I build an app by using gradle.

[format]
(appname of package name)V(version code)(yyMMdd)_(R|T)

[explain] (appname of package name) : example) com.example.myApp -> myApp (version code) : build version code 2.2.3 -> 223 (yyMMdd) : build date 2015.11.18 -> 151118
(R|T) : if app is release, "R" but debug is "T".

If I generate an apk file in release, result is : myApp_V223_151118_R.apk.

How to make a file name like this in gradle?

Android Solutions


Solution 1 - Android

This may be the shortest way:

defaultConfig {
    ...
    applicationId "com.blahblah.example"
    versionCode 1
    versionName "1.0"
    setProperty("archivesBaseName", applicationId + "-v" + versionCode + "(" + versionName + ")")
}

buildType: like so

buildTypes {
    debug {
        ...
        versionNameSuffix "-T"
    }
    release {
        ...
        versionNameSuffix "-R"
    }
}

Keep in mind, Android Studio adds versionNameSuffix by build type name by default, so you may not need this.

Upd. In new versions of Android Studio you can it write little shorter(thanks for szx comment):

defaultConfig {
    ...
    archivesBaseName = "$applicationId-v$versionCode($versionName)"
}

Solution 2 - Android

Update: Please check Anrimian's answer below which is much simpler and shorter.

Try this:

gradle.properties

applicationName = MyApp

build.gradle

android {
  ...
  defaultConfig {
     versionCode 111
     ...
  }
  buildTypes {
     release {
         ...
         applicationVariants.all { variant ->
             renameAPK(variant, defaultConfig, 'R')
         }
     }
     debug {
         ...
         applicationVariants.all { variant ->
             renameAPK(variant, defaultConfig, 'T')
         }
     }
  }
}
def renameAPK(variant, defaultConfig, buildType) {
 variant.outputs.each { output ->
     def formattedDate = new Date().format('yyMMdd')

     def file = output.packageApplication.outputFile
     def fileName = applicationName + "_V" + defaultConfig.versionCode + "_" + formattedDate + "_" + buildType + ".apk"
     output.packageApplication.outputFile = new File(file.parent, fileName)
 }
}

Reference: https://stackoverflow.com/a/30332234/206292 https://stackoverflow.com/a/27104634/206292

Solution 3 - Android

2019 / 2020 - How to change APK name For Gradle 3.3, 3.4, 3.5, 4.0 and above

android {
   ......
   applicationVariants.all { variant ->
       variant.outputs.all {
           def flavor = variant.name
           def versionName = variant.versionName
           outputFileName = "prefix_${flavor}_${versionName}.apk"
       }
   }
}

The result would be like this,

> prefix_release_1.0.1.apk

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionS.J. LimView Question on Stackoverflow
Solution 1 - AndroidAnrimianView Answer on Stackoverflow
Solution 2 - AndroidKrishnarajView Answer on Stackoverflow
Solution 3 - AndroidZumry MohamedView Answer on Stackoverflow