1

我正在尝试为一个 Android 项目创建一个自定义 Gradle 任务,该任务将同时构建我的两种风格,重命名 APK,然后将它们复制到不同的文件夹。

问题是我有这个任务的另一个版本,它与第一个几乎相同,当我运行一个任务时,另一个任务的一部分也会运行。

这是我的第一个任务:

task buildWithVersion(type: GradleBuild) {
    delete "$buildDir/outputs/apk"
    delete "$buildDir/outputs/verionapks"
    tasks = ['assembleMyAppDebug', 'assembleMyAppRelease']
    android.applicationVariants.all { variant ->
        variant.outputs.all { output ->
            outputFileName = "${variant.name}_${variant.versionName}.apk"
        }
    }
    doLast {
        copy {
            from "$buildDir/outputs/apk"
            into "$buildDir/outputs/verionapks"
            include '**/release/*.apk'
        }
    }
}

然后是第二个:

task buildWithoutVersion(type: GradleBuild) {
        delete "$buildDir/outputs/apk"
        delete "$buildDir/outputs/noneverionapks"
        tasks = ['assembleMyAppDebug', 'assembleMyAppRelease']
        android.applicationVariants.all { variant ->
            variant.outputs.all { output ->
                outputFileName = "${variant.name}.apk"
            }
        }
        doLast {
            copy {
                from "$buildDir/outputs/apk"
                into "$buildDir/outputs/noneverionapks"
                include '**/release/*.apk'
            }
        }
    }

为此我需要两个单独的任务,但问题是当我运行第一个任务时,apk 会被重命名,就像第二个任务已经运行一样,所以 apk 以这种格式重命名为“$ {variant.name}.apk”,而不是我在第一个任务中想要的格式。(第二个任务是在我的应用程序 build.gradle 文件中的第一个任务之后)

看起来 android.applicationVariants.all 循环每次都会运行,即使我只希望它在我调用它时在任务中运行。为什么是这样?是否可以仅在运行特定任务时才专门运行?

4

0 回答 0