Android 仅在版本上自动增加版本代码
目前,我正试图通过自动增加版本代码来改进我们的构建脚本,这样我们的QA团队就可以了解他们正在测试的构建,并可以根据特定的版本代码进行日志记录。我们有3种产品风格(登台、qa、生产)和2种签名配置(调试、发布) 我研究了不同的解决方案: 基于这些答案,我使用version.properties文件构建了一个版本代码增量 现在问题出现了,对于每个productFlavor和SigningConfig组合(+android studio中的gradle同步),都会生成一个新的版本代码。每当我点击play按钮创建一个发布版本时,我希望versioncode增加。因此,我们的构建周期是:Android 仅在版本上自动增加版本代码,android,gradle,android-gradle-plugin,Android,Gradle,Android Gradle Plugin,目前,我正试图通过自动增加版本代码来改进我们的构建脚本,这样我们的QA团队就可以了解他们正在测试的构建,并可以根据特定的版本代码进行日志记录。我们有3种产品风格(登台、qa、生产)和2种签名配置(调试、发布) 我研究了不同的解决方案: 基于这些答案,我使用version.properties文件构建了一个版本代码增量 现在问题出现了,对于每个productFlavor和SigningConfig组合(+android studio中的gradle同步),都会生成一个新的版本代码。每当我点击
- 开发(从不更改版本代码)
- qual(更新版本代码)
- 生产(从不更改版本代码)
- 你可以试试这样的东西
import java.util.regex.Pattern
task('increaseVersionCode') << {
... // You could code in your increment system, for eg
// Using build.gradle (recommended)
def buildFile = file("build.gradle")
def pattern = Pattern.compile("versionCode\\s+(\\d+)")
def manifestText = buildFile.getText()
def matcher = pattern.matcher(manifestText)
matcher.find()
def versionCode = Integer.parseInt(matcher.group(1))
def manifestContent = matcher.replaceAll("versionCode " + ++versionCode)
buildFile.write(manifestContent)
// Using manifest
def manifestFile = file('AndroidManifest.xml')
def matcher = Pattern.compile('versionCode=\"(\\d+)\"')
.matcher(manifestFile.getText())
matcher.find()
def manifestContent = matcher.replaceAll('versionCode=\"' +
++Integer.parseInt(matcher.group(1)) + '\"')
manifestFile.write(manifestContent)
}
tasks.whenTaskAdded { task ->
if (task.name == 'assembleQaRelease') {
task.dependsOn 'increaseVersionCode'
}
}
import java.util.regex.Pattern
任务('increaseVersionCode')
if(task.name==“assembleqarease”){
task.dependsOn“increaseVersionCode”
}
}
您可以调整“assembleQaRelease”以增加版本代码以满足所需任务。我是如何解决的:
- 我在android项目的根目录中创建了一个version.properties文件,并在其中添加了versioncode
- 然后,我在build.gradle文件中创建了一个名为getCurrentVersionCode()的方法,该方法读取当前版本代码
任务('increaseVersionCode')
if(task.name==“assembleqarease”){
task.dependsOn“increaseVersionCode”
}
}
这样,它将版本代码保存在一个单独的文件中,因此我不需要使用
文件(“build.gradle”)编辑build.gradle.
你是说android清单文件而不是build.gradle?这取决于你设置版本代码的时间。在build.gradle中定义它是一种很好的做法,它覆盖了清单。只需选择适合您的项目的解决方案;)我会接受你的答案,因为你让我走上了正确的道路。但是我做了一些其他的事情,我也要在解决方案中添加:)有什么特别的方法让gradle读取您在项目文件夹根目录中创建的version.properties文件吗?我无法让gradle读取此文件。这不可能吗?
def getCurrentVersionCode() {
def versionPropsFile = file('version.properties')
def Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
return versionProps['version_code'].toInteger()
}
// http://stackoverflow.com/questions/30523393/auto-increment-versioncode-only-on-releases
//
def setUpdatedVersionCode() {
def versionPropsFile = file('version.properties')
def Properties versionProps = new Properties()
def code = getCurrentVersionCode() + 1
versionProps['version_code'] = code.toString()
versionProps['version_name'] = generateVersionName()
versionProps.store(versionPropsFile.newWriter(), null)
}
task('increaseVersionCode') << {
setUpdatedVersionCode()
}
tasks.whenTaskAdded { task ->
if (task.name == 'assembleQaRelease') {
task.dependsOn 'increaseVersionCode'
}
}