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

标签 android gradle task

应用程序的 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时执行任务,怎么办?

最佳答案

我傻了,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')
}

它对我有用。

关于android - 我想在 AS 的 gradle 中创建一个任务 dependsOn assembleRelease,但该任务也依赖于 assembleDebug。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49357923/

相关文章:

android - 无法解析导入 com.google.api.client.json.gson.GsonFactory

android - gradle如何执行一个ant构建文件

java - Android应用无法在Api 19上打开

android - Eclipse 中的 ADT 插件未显示

Android 在每次重启时检查 Wifi

android - Gradle 忽略 google maven 存储库,只在 jcenter 上搜索

c# - 使用 Task.FromAsync 的 IAsyncResult 重载的性能成本

gradle - 使用 gradle 回滚 liquibase

C# 如何取消进度条?

c++ - 我是否需要在单语言 UWP 应用程序中使用 create_async?