android gradle 编译打包时自动增加版本号和版本名

1、app目录下创建 version.properties 和 version.gradle两个文件,如下图:

QQ截图20201019171745.png

 

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切换

QQ截图20201019173203.png

编译输出

QQ截图20201019172701.png

 

文件下载:

链接:https://pan.baidu.com/s/1db5osFoGoQyqTrXD8-u2Sg 
提取码:t3yp 
复制这段内容后打开百度网盘手机App,操作更方便哦

posted @ 2020-10-19 17:36  Yan327  阅读(788)  评论(0编辑  收藏  举报