ps:最近遇到了qa搞不对包的问题,于是就简单学习了一下动态版本号,用来区分不同日期的包
defaultConfig {
applicationId "xxx.xxx.xxx"
minSdkVersion 23
targetSdkVersion 30
versionCode xx
versionName xx
}
这是我们的默认Config,我们要做的有两点
1.区分环境
2.动态赋值versionName
1.区分环境
applicationVariants.all{ variant ->
switch (variant.getName()){
case "stgRelease" :
break
case "stgDebug" :
break
default :
break
...
}
}
在我们的项目里 通过
applicationVariants.all{ variant ->
switch (variant.getName())
}
来区分不同的环境 variant.getName() 对应不同buildType
2.动态赋值
首先,定义两个方法
方法中传一个布尔值用来区分不同环境的值返回
具体的version算法 可以自己定义
def getVersionCode(boolean isRelease) {
//VersionCode一定是int类型
// 正式环境
if (isRelease) {
40
}
// debug环境
else {
Integer.parseInt(new Date().format("yyMMddHHmm"))
}
}
def getVersionName(boolean isRelease) {
//VersionName一定是String类型
// 正式环境
if (isRelease) {
"x.x.x"
}
// debug环境
else {
String today = new Date().format("MMdd")
String time = new Date().format("HHmm")
"x.x.x.$today.$time"
}
}
包括getVersionCode里的40,可以通过静态变量来赋值,方便查找
ext.appVersionCode = 40
最后在Config里及applicationVariants里动态改变version
defaultConfig {
applicationId "xxx.xxx.xxx"
minSdkVersion 23
targetSdkVersion 30
versionCode getVersionCode(true)
versionName getVersionName(true)
}
applicationVariants.all{ variant ->
switch (variant.getName()){
case "stgRelease" :
variant.outputs.each { output ->
output.versionCodeOverride = getVersionCode(false)
output.versionNameOverride = getVersionName(false)
}
break
case "stgDebug" :
variant.outputs.each { output ->
output.versionCodeOverride = getVersionCode(false)
output.versionNameOverride = getVersionName(false)
}
break
default :
variant.outputs.each { output ->
output.versionCodeOverride = getVersionCode(true)
output.versionNameOverride = getVersionName(true)
}
break
...
}
}
最后贴一下整个build.gradle
apply plugin: 'com.android.application'
ext.appVersionCode = 40
ext.debugAppVersionCode = 40
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "xxx.xxx.xxx"
minSdkVersion 23
targetSdkVersion 30
versionCode getVersionCode(true)
versionName getVersionName(true)
...
}
...
applicationVariants.all{ variant ->
switch (variant.getName()){
case "stgRelease" :
variant.outputs.each { output ->
output.versionCodeOverride = getVersionCode(false)
output.versionNameOverride = getVersionName(false)
}
break
case "stgDebug" :
variant.outputs.each { output ->
output.versionCodeOverride = getVersionCode(false)
output.versionNameOverride = getVersionName(false)
}
break
default :
variant.outputs.each { output ->
output.versionCodeOverride = getVersionCode(true)
output.versionNameOverride = getVersionName(true)
}
break
}
}
...
def getVersionCode(boolean isRelease) {
// 正式环境
if (isRelease) {
appVersionCode
}
// debug环境
else {
debugAppVersionCode
}
}
//Major_Version_Number.Minor_Version_Number[Revision_Number[.Build_Number]]
def getVersionName(boolean isRelease) {
// 正式环境
if (isRelease) {
"x.x.x"
}
// debug环境
else {
String today = new Date().format("MMdd")
String time = new Date().format("HHmm")
"x.x.x.$today.$time"
}
}
dependencies {
...
}
debug版本号
正式版本号