应用程序的 VersionName
类似于“major.minor.patch”。每次组装 .apk 时,我都需要自动添加补丁号。例如,假设 VersionName 是 '1.0.1',在我执行 gradlew assemble
或 gradlew 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 assembleDebug
。 addVersionCode
任务也会执行,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/