Android打包VersionCode自增 - Go语言中文社区

Android打包VersionCode自增


在开发Android项目完之后,我们都会打包然后发布到各个渠道。如果有版本修改,需要再次打包发布,这个时候我们就需要把versionCode和versionName手动去修改,这样才能保证app能够在用户手中升级。

但是,咱们是不是会有时候忘记去修改这两个值的情况呢?(反正我是经常忘记的)如果忘记修改了,那么,这次打包就白打了。

针对这个问题,我们有没有什么办法呢?答案是:肯定有的,下面我来分享一下我的经验


第一步:

创建一个文件,名字就叫version.properties(当然,这个不一定要这么写),位置和build.gradle文件同级,app这个是我的执行module,

文件里面的内容是:

VERSION_CODE=10104




第二步:

在build.gradle文件里面加入以下代码(注意:代码的位置和android{...}平级),此方法是获取自增之后的版本号

def getVersionCode() {// 获取版本号
    def versionFile = file('version.properties')// 读取第一步新建的文件
    if (versionFile.canRead()) {// 判断文件读取异常
        Properties versionProps = new Properties()
        versionProps.load(new FileInputStream(versionFile))
        def versionCode = versionProps['VERSION_CODE'].toInteger()// 读取文件里面的版本号
        def runTasks = gradle.startParameter.taskNames 
        if ('assembleRelease' in runTasks ) {//仅在assembleRelease任务是增加版本号,其他渠道包在此分别配置
			// 版本号自增之后再写入文件(此处是关键,版本号自增+1)
        	versionProps['VERSION_CODE'] = (++versionCode).toString()
        	versionProps.store(versionFile.newWriter(), null)
        }
        return versionCode // 返回自增之后的版本号
    } else {
        throw new GradleException("Could not find version.properties!")
    }
}

android{
	...
}

需要特别注意的是,正常情况,我们只有在打包的时候才需要自增versionCode,平时调试是不需要改变这个值的,所以我们需要加入下面这个判断


如果有多渠道打包时,可以这样写,task1和task2要根据具体情况而定。

 if ('assembleRelease' in runTasks || 'task1' in runTasks || 'task2' in runTasks ) {//仅在assembleRelease任务是增加版本号,其他渠道包在此分别配置
			// 版本号自增之后再写入文件(此处是关键,版本号自增+1)
        	versionProps['VERSION_CODE'] = (++versionCode).toString()
        	versionProps.store(versionFile.newWriter(), null)
        }

值得一提的是,我在做这一步的时候,碰到了一个坑,我没有设置多渠道打包,按理说task的值是assembleRelease(一般情况是这样的),但是实际上我这里需要用:app:assembleRelease,至于什么原因,此处就不说了,教大家一个很简单的方法来确定这个值:

就是你打包一个release的apk,打包的过程中你可以看到这段代码,其中2中红色框框里面的中括号内容便是你所需要的



第三步:

build.gradle文件,在你设置版本号的加入一下代码


我这里是直接在默认位置设置的版本号,要注意这段代码的位置哟!!!

versionName和versionCode处理方式类似,最后再去简单说明一下

def currentVersionCode = getVersionCode()

现在,你再去打包,你会发现,version.properties里面的10104变成了10105,如果没有改变,有两个可能:

1、第二步里面的 assembleRelease 错了,请按照第二步中红色文字调试

2、第三步中,getVersionCode()方法的位置错了(我当时不小心放到defaultConfig{...}中去了)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

最后,简单提一下getVersionName()这个方法

def getVersionName() {
    def date = new Date();
    def versionName = date.format('yyyyMMddHHmmss');
    return versionName
}
此处我是用时间戳来处理的,当然,你也可以用你觉得合适的方式来做自动化处理


版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/AaronYB/article/details/80594220
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 21:18:58
  • 阅读 ( 1007 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢