两种方法实现VersionCode和VersionName自增
来源:互联网 发布:减肥晚上吃什么 知乎 编辑:程序博客网 时间:2024/05/21 13:54
方法一:根据当前时间实现版本号自增
//按日期生成的包名def versionTag() { return new Date().format("MMdd", TimeZone.getTimeZone("UTC"))}// versionCode按时间自增def increasedVersionCode(){ return (int)(System.currentTimeMillis()/1000/60/60/24-17141)}android { ... defaultConfig { ... versionCode increasedVersionCode() ... } ... buildTypes { release {...} debug {...} // 按日期命名release包 applicationVariants.all { variant -> def file = variant.outputs[0].outputFile if(!file.name.contains("debug")){ variant.outputs[0].outputFile = new File(file.parent, file.name.replace("app-rmapk-", "apk名_" + versionTag()+"_")) } } }}
方法1优点是代码简单,缺点是还是不够灵活,比如我定的12个小时更新一个版本号,万一需要12小时内更新两个版本呢?如果改成6小时,某些强迫症患者比如我又会觉得很多版本号没用上,不舒服。如果你也这样觉得,请看方法2.
方法二:根据打release版本的次数实现版本号自增
在“gradle.properties”里定义key-value:
VERSION_CODE = 1
;你也可以在app目录下新建一个properties文件,我这里为了省懒。原理就是:每次打release版本时从properties文件中读取上一个版本号,然后+1生成新版本号,并覆盖properties文件中的旧版本号。如果碰到“找不到文件”或者不能read的情况,请检查路径,比如这里的gradle.properties是在app的gradle文件的上一级目录,也就是project目录下。这里判断propFile.canRead也省下了,gradle自己就会抛异常,没必要自己再抛一次。
ext { // 定义当前gradle文件的全局变量 isRelease = checkRelease() targetTask = ""}// 通过taskName判断当前操作是否是在打release包,只需执行一次def checkRelease() { def runTasks = gradle.startParameter.taskNames for (String task : runTasks) { // 我这里认为执行“assemble”和非“debug”的任务就是执行“release”的任务 if (task.contains("assemble") && !task.contains("Debug")) { targetTask = task return true } } return false}def increasedVersionCode() { def propFile = file('../gradle.properties') def Properties props = new Properties() props.load(new FileInputStream(propFile)) // 读取gradle.properties文件中定义的VERSION_CODE属性 def code = props['VERSION_CODE'].toInteger() if (isRelease) { code++ props['VERSION_CODE'] = code.toString() // 将最新的versionCode写入gradle.properties文件中 props.store(propFile.newWriter(), null) } return code}android { ... defaultConfig { ... versionCode increasedVersionCode() ... } ... // 修改release包的apk文件名 applicationVariants.all { variant -> // 这里是个循环,所以不要在这checkRelease() def buildTypeName = variant.buildType.name println("buildType-------->" + buildTypeName) // 不要修改debug包的名,不然每次调试运行都会创建新包 if ("release" == buildTypeName) { def file = variant.outputs[0].outputFile; def fileName = "appName_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${variant.flavorName}_${buildTypeName}.apk" tasks.all{ // 遍历任务集合 if(targetTask == it.name){ it.doLast{ //执行完目标任务之后 variant.outputs[0].outputFile = new File(file.parent, fileName) } } } } }}
0 0
- 两种方法实现VersionCode和VersionName自增
- 两种方法实现VersionCode和VersionName自增
- VersionCode和VersionName
- VersionCode和VersionName
- VersionCode和VersionName相关
- AndroidManifest:VersionCode和VersionName
- AndroidManifest:VersionCode和VersionName
- versionCode和versionName
- VersionCode和VersionName
- AndroidManifest:VersionCode和VersionName
- VersionCode和VersionName的区别
- android:versionCode和android:versionName
- versionname 和 versioncode的区别
- android获取versionName和versionCode
- 安卓 VersionCode和VersionName
- android:versionCode和android:versionName
- (原创)VersionCode和VersionName
- android:versionCode和android:versionName 用途
- windows 如何安装pip
- setFirstDayOfWeek 不起作用,疑惑?
- mysql查询语句select-(null,not null,is null和is not null)
- AS出现Error:(1, 0) Plugin with id' com.android.application' not found.
- Linux - openvpn seutp automatically
- 两种方法实现VersionCode和VersionName自增
- 平淡日子里看见自己
- eclipse导入maven工程
- PC上安装多个操作系统
- Java网络编程
- 关于mac 执行rails c出现completion.rb:9:in `require': dlopen(/Users/guoyoujin/.rvm/rubies/ruby-2.2.5/lib/ru
- iFunk翼真机曝光,实拍美爆了!
- intellij idea "cannot resolve property key"
- 语言程序hellow world