Created
July 13, 2016 19:39
-
-
Save tunjos/9d833a2cde1832ad0b7882a62cd812d2 to your computer and use it in GitHub Desktop.
Automatic versionCode generation in Android Gradle
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defaultConfig { | |
versionCode buildVersionCode() | |
versionName version | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Top-level build file where you can add configuration options common to all sub-projects/modules. | |
apply from: 'versioning.gradle' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
version=0.1.0-SNAPSHOT |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ext { | |
/** | |
* Builds an Android version code from the version of the project. | |
* This is designed to handle the -SNAPSHOT and -RC format. | |
* | |
* I.e. during development the version ends with -SNAPSHOT. As the code stabilizes and release nears | |
* one or many Release Candidates are tagged. These all end with "-RC1", "-RC2" etc. | |
* And the final release is without any suffix. | |
* @return | |
*/ | |
buildVersionCode = { | |
//The rules is as follows: | |
//-SNAPSHOT counts as 0 | |
//-RC* counts as the RC number, i.e. 1 to 98 | |
//final release counts as 99. | |
//Thus you can only have 98 Release Candidates, which ought to be enough for everyone | |
def candidate = "99" | |
def (major, minor, patch) = version.toLowerCase().replaceAll('-', '').tokenize('.') | |
if (patch.endsWith("snapshot")) { | |
candidate = "0" | |
patch = patch.replaceAll("[^0-9]","") | |
} else { | |
def rc | |
(patch, rc) = patch.tokenize("rc") | |
if (rc) { | |
candidate = rc | |
} | |
} | |
(major, minor, patch, candidate) = [major, minor, patch, candidate].collect{it.toInteger()} | |
(major * 1000000) + (minor * 10000) + (patch * 100) + candidate; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment