使用Git进行版本控制时,可以在Git仓库目录下用控制台命令 git rev-list --count HEAD,获取当前版本库的提交次数,可将此信息添加至APP的版本信息中。
Microsoft Windows [版本 10.0.18363.535]
(c) 2019 Microsoft Corporation。保留所有权利。
D:\android_works\sanxing>git rev-list --count HEAD
6
D:\android_works\sanxing>
获取到Git的提交次数信息后,就可以封装到我们写的版本信息生成方法中
/**
*
* @param type 版本信息类型 code or name
* @param aa 大版本号
* @param bb 中版本号
* @param cc 小版本号
* @return
*/
def getVersionInfo(type,aa,bb,cc) {
//git 号
Process process = "git rev-list --count HEAD".execute()
process.waitFor()
int dddd = process.getText().toInteger()
if ("code".equals(type)) {
//生成versionCode
return dddd
} else if ("name".equals(type)) {
//生成versionName
return "$aa.$bb.$cc".concat("_").concat("$dddd").concat("_").concat(releaseTimeForName())
}
}
完整代码如下:
ext {
//base config
testMode = false
applicationId = testMode ? "top.lixb.sanxing" : "top.lixb.sanxing" //app id
applicationName = testMode ? "三省" : "三省" //app 名称
geoMapKey = "" //高德key
baiduMapKey ="" //百度key
//android
compileSdkVersion = 28
buildToolsVersion = "28.0.3"
//defaultConfig
minSdkVersion = 17
targetSdkVersion = 28
versionNamePrefix = "sanxing"
versionA = 0 //大版本号
versionB = 1 //中版本号
versionC = 0 //小版本号
versionCode = getVersionInfo("code",versionA,versionB,versionC)
versionName = versionNamePrefix.concat("_V").concat(getVersionInfo("name",versionA,versionB,versionC))
println "versionCode:"+versionCode
println "versionName:"+versionName
//支持的架构类型
abiFilters = '"armeabi-v7a"' //,"armeabi"'// , x86, arm64-v8a , x86_64'
//v7 v4 依赖包版本
supportLibrary = "27.1.1"
//其他依赖库本部
}
/**
*
* @param type 版本信息类型 code or name
* @param aa 大版本号
* @param bb 中版本号
* @param cc 小版本号
* @return
*/
def getVersionInfo(type,aa,bb,cc) {
//git 号
Process process = "git rev-list --count HEAD".execute()
process.waitFor()
int dddd = process.getText().toInteger()
if ("code".equals(type)) {
//生成versionCode
return dddd
} else if ("name".equals(type)) {
//生成versionName
return "$aa.$bb.$cc".concat("_").concat("$dddd").concat("_").concat(releaseTimeForName())
}
}
/**
* 获取时间信息
* @return
*/
def static releaseTimeForName() {
return new Date().format("yyyyMMdd")
}
每次build的时候可以看到相应的版本信息:
> Configure project :app
versionCode:6
versionName:sanxing_V0.1.0_6_20200429
> Task :app:createMockableJar UP-TO-DATE
> Task :libcommon:preBuild UP-TO-DATE
> Task :libcommon:preDebugBuild UP-TO-DATE
> Task :libcommon:compileDebugAidl NO-SOURCE
> Task :libcommon:compileDebugRenderscript NO-SOURCE
> Task :libcommon:checkDebugManifest UP-TO-DATE
> Task :libcommon:generateDebugBuildConfig UP-TO-DATE
> Task :libcommon:prepareLintJar UP-TO-DATE
> Task :libcommon:prepareLintJarForPublish UP-TO-DATE
> Task :libcommon:generateDebugSources UP-TO-DATE
> Task :app:preBuild UP-TO-DATE
> Task :app:preDebugAndroidTestBuild SKIPPED
......
网友评论