1、app目录下创建 version.properties 和 version.gradle两个文件,如下图:
build.gradle引入
apply from: 'version.gradle'
两个文件内容如下:
version.gradle
#Mon Oct 19 17:08:24 CST 2020 VERSION_DEBUG_MAJOR=1 VERSION_DEBUG_NAME=1.0.0.6 VERSION_DEBUG_CODE=10006 VERSION_DEBUG_BUILD=6 VERSION_RELEASE_PATCH=0 VERSION_RELEASE_NAME=1.0.0 VERSION_RELEASE_MINOR=0 VERSION_RELEASE_CODE=10000 VERSION_DEBUG_PATCH=0 VERSION_RELEASE_MAJOR=1 VERSION_DEBUG_MINOR=0 VERSION_RELEASE_BUILD=0
version.properties:
import java.util.regex.Matcher import java.util.regex.Pattern //初始化版本号 ext{ initVerDebug = false initVerRelease = false init = [ major : 1, //default 1 minor : 0, //default 0 patch : 0 //default 0 ] } //版本号设置 def versionCfgSet(String task, File verfile, int major, int minor, int patch, int build){ println task if (verfile != null && verfile.canRead()){ def Properties versionProps = new Properties() versionProps.load(new FileInputStream(verfile)) build = build + 1 if(ext.initVerDebug || ext.initVerRelease){ major = 1 minor = 0 patch = 0 build = 0 }else{ major = ext.init.major minor = ext.init.minor patch = ext.init.patch } project.ext.versionCode = major * 10000 + minor * 1000 + patch * 100 + build def versionTmp = "${major}.${minor}.${patch}.${build}" project.ext.versionName = versionTmp if(task.contains("Release")){ project.ext.versionName = "${major}.${minor}.${patch}" versionProps.setProperty('VERSION_RELEASE_MAJOR', major.toString()) versionProps.setProperty('VERSION_RELEASE_MINOR', minor.toString()) versionProps.setProperty('VERSION_RELEASE_PATCH', patch.toString()) versionProps.setProperty('VERSION_RELEASE_BUILD', build.toString()) versionProps.setProperty('VERSION_RELEASE_CODE', project.ext.versionCode.toString()) versionProps.setProperty('VERSION_RELEASE_NAME', project.ext.versionName) versionProps.store(verfile.newWriter(), null) }else if(task.contains("Debug")){ versionProps.setProperty('VERSION_DEBUG_MAJOR', major.toString()) versionProps.setProperty('VERSION_DEBUG_MINOR', minor.toString()) versionProps.setProperty('VERSION_DEBUG_PATCH', patch.toString()) versionProps.setProperty('VERSION_DEBUG_BUILD', build.toString()) versionProps.setProperty('VERSION_DEBUG_CODE', project.ext.versionCode.toString()) versionProps.setProperty('VERSION_DEBUG_NAME', project.ext.versionName) versionProps.store(verfile.newWriter(), null) } println '--------Building Complete!----------' println "The new config of version: " println 'Version Code: ' + project.ext.versionCode.toString() println 'Version Name: ' + project.ext.versionName + " ( ${versionTmp} )" println '---------------------------' }else{ throw new GradleException("Could not read version.properties!") } } android { def versionMajor = 1 def versionMinor = 0 def versionPatch = 0 def versionBuild = 0 def versionFileName = "version.properties"; def versionPropsFile = file("${versionFileName}") def taskName = "" //Initialize versionPropsFile name & releaseTaskName Gradle gradle = getGradle() String tskReqStr = gradle.getStartParameter().getTaskRequests().toString() println(tskReqStr) Pattern pattern = Pattern.compile(":assemble(.*?)(Release|Debug)") Matcher matcher = pattern.matcher(tskReqStr) //Get current flavor name if (matcher.find()) { println "MATCH FOUND" def flavor = matcher.group(2).toLowerCase(); // versionPropsFile = file("${versionFileName}") taskName = "assemble${matcher.group(2)}" println 'taskName ' + taskName } else { println "NO MATCH FOUND" println "Other" } /*Setting default value for versionBuild which is the last incremented value stored in the file */ if (versionPropsFile != null && versionPropsFile.canRead()) { def Properties versionProps = new Properties() versionProps.load(new FileInputStream(versionPropsFile)) //区分debug和release版本 if(taskName.contains('Release')){ versionMajor = versionProps.getProperty('VERSION_RELEASE_MAJOR', '1').toInteger() versionMinor = versionProps.getProperty('VERSION_RELEASE_MINOR', '0').toInteger() versionPatch = versionProps.getProperty('VERSION_RELEASE_PATCH', '0').toInteger() versionBuild = versionProps.getProperty('VERSION_RELEASE_BUILD', '0').toInteger() }else if(taskName.contains('Debug')){ versionMajor = versionProps.getProperty('VERSION_DEBUG_MAJOR', '1').toInteger() versionMinor = versionProps.getProperty('VERSION_DEBUG_MINOR', '0').toInteger() versionPatch = versionProps.getProperty('VERSION_DEBUG_PATCH', '0').toInteger() versionBuild = versionProps.getProperty('VERSION_DEBUG_BUILD', '0').toInteger() }else{ project.ext.versionCode = 0 project.ext.versionName = '0.0.0.0' } project.ext.versionCode = versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild project.ext.versionName = "${versionMajor}.${versionMinor}.${versionPatch}.${versionBuild}" println '--------Building----------' println "The old config of version: " println 'PropsFile: ' + versionPropsFile.toString() println 'versionMajor ' + versionMajor.toString() println 'versionMinor ' + versionMinor.toString() println 'versionPatch ' + versionPatch.toString() println 'versionBuild ' + versionBuild.toString() println 'Version Code: ' + project.ext.versionCode.toString() println 'Version Name: ' + project.ext.versionName println '---------------------------' } else { throw new GradleException("Could not read version.properties!") } /* * VersionCode : versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild * VersionName : "${versionMajor}.${versionMinor}.${versionPatch}.${versionBuild}" * versionBuild: Auto increment (+1) every Jenkins release build * Reset version build to 0 if any of versionMajor, versionMinor or versionPatch changed. */ def runTasks = gradle.startParameter.taskNames.toString() if(runTasks.contains(taskName)){ if(taskName.contains("Release")){ println "Release Building ..." versionCfgSet(taskName, versionPropsFile, versionMajor, versionMinor, versionPatch, versionBuild) }else if(taskName.contains("Debug")){ println "Debug Building ..." versionCfgSet(taskName, versionPropsFile, versionMajor, versionMinor, versionPatch, versionBuild) }else{ println "Sync now ..." project.ext.versionCode = 1 project.ext.versionName = "0.0.0" } } }
debug/release切换
编译输出
文件下载:
链接:https://pan.baidu.com/s/1db5osFoGoQyqTrXD8-u2Sg
提取码:t3yp
复制这段内容后打开百度网盘手机App,操作更方便哦