应用程序的VersionName类似于“major.minor.patch”。每次组装.apk时,我都需要自动添加补丁号。例如,假设VersionName为'1.0.1',在执行gradlew assemblegradlew assembleRelease之后,我希望VersionName更改为'1.0.2'。

因此,我在/ app中制作了一个version.properties文件。

major=1
minor=0
patch=1

/ app中的build.gradle部分如下:
 buildTypes {
    debug {
        testCoverageEnabled = true
        applicationIdSuffix '.debug'
        versionNameSuffix '-debug'
    }
    release {
        minifyEnabled false
        signingConfig signingConfigs.release
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        android.applicationVariants.all { variant ->
            variant.outputs.all {
                if (variant.buildType.name == 'release') {
                    def newName = variant.name + "_" + getCustomVersionName() + "_" + releaseTime + ".apk"
                    outputFileName = new File(newName)
                }
            }
        }
}

最后,我定义一个依赖于assembleRelease任务的自定义任务。
   task addVersionCode(dependsOn: 'assembleRelease') {
     Properties versionProperties = new Properties()
     versionProperties.load(project.file('version.properties').newInputStream())
     def customNum = versionProperties.getProperty('custom')
     versionProperties.setProperty('custom', ++customNum)
     versionProperties.save(project.file('version.properties').newOutputStream(), 'add version code')
}

有用。但是每次我在终端中执行gradlew assembleDebug时。 addVersionCode任务也将执行,并且VersionName(version.properties文件中的补丁)也会增加。我不想要这个,我只想在执行gradlew assembleRelease时执行任务,该怎么办?

最佳答案

我太笨了,addVersionCode任务应该是执行任务,而不是配置任务。因此,只需更改定义任务的方法并添加doLast即可。最后,添加了assembleRelease任务作为依赖项。就像下面这样:

Task autoChangeVersionCode = task(autoChangeVersionCode, group: BasePlugin.BUILD_GROUP)

autoChangeVersionCode.doLast {
    Properties versionProperties = new Properties()
    versionProperties.load(project.file('version.properties').newInputStream())
    def custom = versionProperties.getProperty('custom')
    versionProperties.setProperty('custom', ++custom)
    versionProperties.store(project.file('version.properties').newOutputStream(), 'increase version code')
}

这个对我有用。

10-07 19:31
查看更多