AndroidStudio提取Git信息到APP版本信息中

使用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
......

你可能感兴趣的:(AndroidStudio提取Git信息到APP版本信息中)