美文网首页
Android VersionName和VersionCode

Android VersionName和VersionCode

作者: hua_dm | 来源:发表于2019-07-29 14:44 被阅读0次

    第一、在项目 app 创建文件version.properties


    image.png

    [version.properties]

    第二、在version.properties中创建
    VERSION_CODE = YOUR CODE (比如 110)
    VERSION_NAME = YOUR NAME (比如 1.1.0)

    image.png

    第三、在app.build中android{ .... } 中写入如下代码:
    def versionCode = getVersionCode()
    def versionName = getVersionName()
    这两句不要在defaultConfig{ .. }中添加,接着在defaultConfig中
    versionCode = versionCode
    versionName = versionName

    全部代码:

    apply plugin: 'com.android.application'
     
    android {
     
        def versionCode = getVersionCode()
        def versionName = getVersionName()
     
        defaultConfig {
            ......
     
            versionCode versionCode
            versionName versionName
            ......
        }
     
        ......
    }
    
    //设置versionCode 自增长
    def getVersionCode() {
        def versionFile = file('version.properties')
        if (versionFile.canRead()) {
            Properties properties = new Properties()
            properties.load(new FileInputStream(versionFile))
            def versionCode = properties['VERSION_CODE'].toInteger()//读取  version.properties文件存放的版本号。
            def runTasks = gradle.startParameter.taskNames
            def task = ':app:assembleICBC_APPRelease' //(此处一定要注意)
            if (task in runTasks) {  //仅在每次打正式包的时候是增加版本号,普通运行下无法自增长
                properties['VERSION_CODE'] = (++versionCode).toString()
                properties.store(versionFile.newWriter(), null)
            }
     
            return versionCode
        } else {
            throw new GradleException("Could not find version.properties!")
        }
    }
    
    //获取版本号,设置版本号自增
    def getVersionName(){
        def versionFile = file('version.properties')
        if(versionFile.canRead()){ //判断文件读取异常
            Properties versionProps = new Properties()
            versionProps.load(new FileInputStream(versionFile))
            def versionName = versionProps['VERSION_NAME'].toString() //读取文件中的版本号
            def runTasks = gradle.startParameter.taskNames
            def task = ':app:assembleICBC_APPRelease' //此要注意 ***
            if(task in runTasks){ //仅在每次打正式包的时候是增加版本号,普通运行下无法自增长
                // 版本号自增之后再写入文件(此处是关键,版本号自增+1)
                versionProps['VERSION_NAME'] = ++versionName
                versionProps.store(versionFile.newWriter(),null)
                print('ICBC versionName : ' + versionName)
            }
            return versionName
        }else{
            throw new GradleException("Could not find version.properties!")
        }
    }
    

    第四 变量task定义容易出错
    def task = ':app:assembleICBC_APPRelease'
    在打包的时候能看到这个task的值


    image.png

    红框的值就是task的值,一定要写对,要不然versionCode和versionName无法自增

    OK完毕,再次总结一下。

    后记:VERSION_NAME = YOUR NAME (比如 1.1.0)设置成这种格式,不适合自增加,还需手动设置为好。

    相关文章

      网友评论

          本文标题:Android VersionName和VersionCode

          本文链接:https://www.haomeiwen.com/subject/zxebrctx.html