【问题标题】:I would like to create a task dependsOn assembleRelease in gradle, AS, but the task alse dependsOn the assembleDebug.我想在 gradle、AS 中创建一个任务依赖于 assembleRelease,但该任务还依赖于 assembleDebug。
【发布时间】:2018-03-19 07:42:32
【问题描述】:

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

【问题讨论】:

    标签: android gradle task


    【解决方案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')
    }
    

    它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2021-08-19
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      相关资源
      最近更新 更多