首页 > 解决方案 > 如何使用 Gradle 对您的 Android 应用程序代码进行版本控制

问题描述

在你的 build.gradle (:app)

我使用 Gradle 6.5 和插件 4.13

android {
    compileSdkVersion 30
    def _versionCode=1
    def versionPropsFile = file('version.properties')
    Properties versionProps = new Properties()
    if(versionPropsFile.exists())
        versionProps.load(new FileInputStream(versionPropsFile))
    def _patch = (versionProps['PATCH'] ?: "0").toInteger() + 1
    def _major = (versionProps['MAJOR'] ?: "0").toInteger()
    def _minor = (versionProps['MINOR'] ?: "0").toInteger()
    List<String> runTasks = gradle.startParameter.getTaskNames()
    def value = 0
    for (String item : runTasks)
        if ( item.contains("assembleRelease")) {
            value = 1
        }
    _versionCode = (versionProps['VERSION_CODE'] ?: "0").toInteger() + value
    if(_patch==99999)
    {
        _patch=0
        _minor=_minor+1
    }
    if(_major==99){
        _major=0
        _major=_major+1
    }

    versionProps['MAJOR']=_major.toString()
    versionProps['MINOR']=_minor.toString()
    versionProps['PATCH']=_patch.toString()
    versionProps['VERSION_CODE']=_versionCode.toString()
    versionProps.store(versionPropsFile.newWriter(), null)
    def _versionName = "${_major}.${_versionCode}.${_minor}.${_patch}"

        defaultConfig {
            applicationId "za.co.zone.cupio"
            minSdkVersion 26
            targetSdkVersion 30
            versionCode _versionCode
            versionName _versionName
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
            javaCompileOptions {
                annotationProcessorOptions {
                    arguments += [
                            "room.schemaLocation"  : "$projectDir/schemas".toString(),
                            "room.incremental"     : "true",
                            "room.expandProjection": "true"]
                }
            }
        }
    //the rest of "android {}"
}

然后您访问 EG 中的变量 versionCode 和 versionName。分段

        val versionName: String = BuildConfig.VERSION_NAME
        val displayVersion = "Version : $versionName"
    
        // update layout !
        version.text = displayVersion

version.properties将在 {appfolder}\app 中创建一个文件,该文件可能如下所示:

#Sun Apr 11 14:03:56 CAT 2021
MAJOR=1
MINOR=0
VERSION_CODE=1
PATCH=313

Android 商店不喜欢版本代码 < 1 因此确保 VERSION_CODE=1 任何值都可以工作 < 0 结果将显示为版本:1.1.0.313

标签: androidkotlingradle

解决方案


推荐阅读