对于我使用Gradle构建的每个APK文件,我需要做2件事(依次):
我在名为produce_artifacts.gradle
的所有项目/模块的中央位置创建了文件,内容如下:
def getBuildDate() {
def date = new Date()
return date.format('yyyyMMdd')
}
def getBuildCommit() {
return ['git', 'rev-parse', 'HEAD'].execute().text.trim()
}
def getVcsBranchName() {
return ['git', 'rev-parse', '--abbrev-ref', 'HEAD'].execute().text.trim()
}
task produceArtifacts {
group 'Package Configuration'
description 'Create a CMS-consumable ZIP file for a built APK'
dependsOn "$project.path" + ":assembleFullRelease"
def buildCommit = getBuildCommit()
def buildBranch = getVcsBranchName()
def buildDescription = buildBranch + '-' + buildCommit
def buildDate = getBuildDate()
android.applicationVariants.all { variant ->
def taskPackage = tasks.create("package_${variant.name}", Exec) {
workingDir buildscript.sourceFile.parent
def apk = variant.outputs[0].outputFile
def apkDir = apk.getParent();
def inputConfig = '' + project.projectDir + File.separator +
packageConfigXmlFile
def outputConfig = apkDir + File.separator + 'PackageConfig.xml'
commandLine 'python', 'setup-package-config.py', versions.version, inputConfig,
outputConfig, apk, buildDescription
}
def taskZip = tasks.create("zip_${variant.name}", Zip) {
from variant.outputs[0].outputFile.parent
include '*.apk'
include '*.xml'
baseName project.name
destinationDir file(variant.outputs[0].outputFile.parent)
}
produceArtifacts.dependsOn(taskZip)
taskZip.dependsOn(taskPackage)
}
}
在每个构建APK的项目的build.gradle
中,我将其添加到最底端(位于android {}
块之外):
ext.packageConfigXmlFile = 'Sync_PackageConfig.xml'
apply from: '../../Core/Build/produce_artifacts.gradle'
然后在我的构建服务器上,运行以下命令:
$ ./gradlew --parallel --max-workers=3 produceArtifacts
我希望发生的事情是:
assembleFullRelease
应该由produceArtifacts
调用以构建应用程序及其APK package_${variant.name}
被调用,其中${variant.name}
是许多正在处理的当前变量。这样会生成XML文件,并依赖于执行python脚本之前存在的APK文件。zip_${variant.name}
被调用,其中${variant.name}
是许多正在处理的当前变量。这需要XML和APK文件存在。我在#2处发现,它在APK真正放入磁盘之前执行得很好。我不确定为什么要这么早执行。由于我已设置依赖项,因此它应等待assembleFullRelease
任务完成,其中应包含APK输出。
这对我来说很混乱,任何人都可以帮助我按我期望的顺序进行这项工作吗?
我正在运行Android Studio / Gradle Build Tools v3.2 Beta 2和Gradle版本4.8.1。