sea*_*kej 78 android build auto-increment gradle android-manifest
我正在尝试基于Gradle的新Android构建系统,我在想,用它自动增加versionCode的最佳方法是什么.我正在考虑两种选择
有没有更简单或合适的解决方案?
有没有人使用过mentiod选项之一并可以与我分享?
sea*_*kej 56
我已经决定第二个选项 - 解析AndroidManifest.xml.这是工作片段.
task('increaseVersionCode') << {
def manifestFile = file("AndroidManifest.xml")
def pattern = Pattern.compile("versionCode=\"(\\d+)\"")
def manifestText = manifestFile.getText()
def matcher = pattern.matcher(manifestText)
matcher.find()
def versionCode = Integer.parseInt(matcher.group(1))
def manifestContent = matcher.replaceAll("versionCode=\"" + ++versionCode + "\"")
manifestFile.write(manifestContent)
}
tasks.whenTaskAdded { task ->
if (task.name == 'generateReleaseBuildConfig') {
task.dependsOn 'increaseVersionCode'
}
}
Run Code Online (Sandbox Code Playgroud)
versionCode在这种情况下发布用于发布版本.要在调试版本中增加它,请在task.whenTaskAdded回调中更改task.name等式.
And*_*res 39
我正在使用此代码使用"major.minor.patch.build"方案更新versionCode和versionName.
import java.util.regex.Pattern
task('increaseVersionCode') << {
def manifestFile = file("src/main/AndroidManifest.xml")
def pattern = Pattern.compile("versionCode=\"(\\d+)\"")
def manifestText = manifestFile.getText()
def matcher = pattern.matcher(manifestText)
matcher.find()
def versionCode = Integer.parseInt(matcher.group(1))
def manifestContent = matcher.replaceAll("versionCode=\"" + ++versionCode + "\"")
manifestFile.write(manifestContent)
}
task('incrementVersionName') << {
def manifestFile = file("src/main/AndroidManifest.xml")
def patternVersionNumber = Pattern.compile("versionName=\"(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)\"")
def manifestText = manifestFile.getText()
def matcherVersionNumber = patternVersionNumber.matcher(manifestText)
matcherVersionNumber.find()
def majorVersion = Integer.parseInt(matcherVersionNumber.group(1))
def minorVersion = Integer.parseInt(matcherVersionNumber.group(2))
def pointVersion = Integer.parseInt(matcherVersionNumber.group(3))
def buildVersion = Integer.parseInt(matcherVersionNumber.group(4))
def mNextVersionName = majorVersion + "." + minorVersion + "." + pointVersion + "." + (buildVersion + 1)
def manifestContent = matcherVersionNumber.replaceAll("versionName=\"" + mNextVersionName + "\"")
manifestFile.write(manifestContent)
}
tasks.whenTaskAdded { task ->
if (task.name == 'generateReleaseBuildConfig' || task.name == 'generateDebugBuildConfig') {
task.dependsOn 'increaseVersionCode'
task.dependsOn 'incrementVersionName'
}
}
Run Code Online (Sandbox Code Playgroud)
小智 36
它似乎不是你正在使用的确切设置,但在我的情况下,构建由jenkins运行,我想使用它的$ BUILD_NUMBER作为应用程序的versionCode.以下为我做了诀窍.
defaultConfig {
...
versionCode System.getenv("BUILD_NUMBER") as Integer ?: 9999
...
}
Run Code Online (Sandbox Code Playgroud)
tha*_*h84 15
我正在使用时间戳作为版本代码:
def date = new Date()
def formattedDate = date.format('yyMMddHHmm')
def code = formattedDate.toInteger()
defaultConfig {
minSdkVersion 10
targetSdkVersion 21
versionCode code
}
Run Code Online (Sandbox Code Playgroud)
如果您在build.gradle文件中保留版本代码,请使用下一个代码段:
import java.util.regex.Pattern
task('increaseVersionCode') << {
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)
}
Run Code Online (Sandbox Code Playgroud)
Gradle Advanced Build Version 是一个 Android 插件,可以自动生成versionCode和versionName。有很多定制。在这里你可以找到更多关于它的信息 https://github.com/moallemi/gradle-advanced-build-version
| 归档时间: |
|
| 查看次数: |
42395 次 |
| 最近记录: |