我想在gradle,AS中创建一个任务dependsOn assembleRelease,但任务依赖于assembleDebug。

时间:2018-03-19 07:42:33

标签: android gradle task

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

因此,我在/ 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 assembleDebugaddVersionCode任务也会执行,VersionName(version.properties文件中的补丁)也会增加。我不想要这个,我只想在执行gradlew assembleRelease时执行任务,我该怎么办?

1 个答案:

答案 0 :(得分:1)

我是如此愚蠢,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')
}

它对我有用。