如何将日期编译附加到分级上的版本名后缀

我正在使用 Android Studio,我需要在我的 Android 建造,分级文件的 versionNameSuffix后面添加一个后缀。我有三种不同的构建类型,我只需要将 datetime 添加到我的“ beta”版本中。我真正的档案是:

defaultConfig {
versionCode 14
versionName "0.7.5"
minSdkVersion 9
targetSdkVersion 18
}
buildTypes {
beta {
packageNameSuffix ".beta"
versionNameSuffix "-beta"
signingConfig signingConfigs.debug
}
....
}

对于测试和自动部署,我需要得到最终的版本名称,如: 0.7.5-beta-build201310040.7.5-beta-build1380855996或类似的东西。有什么想法吗?

65036 次浏览

I'm not familiar with Android Studio, but I'll assume Gradle behaves as it normally does. Adding something like this to your build project configuration should do the trick:

allProjects {
gradle.taskGraph.whenReady { taskGraph ->
versionNameSuffix += '-build' + // Java/Groovy code to produce the timestamp formatted the way you want
}
}
beta {
packageNameSuffix ".beta"
versionNameSuffix "-beta" + "-build" + getDate()
signingConfig signingConfigs.debug
}


def getDate() {
def date = new Date()
def formattedDate = date.format('yyyyMMddHHmmss')
return formattedDate
}

Condensed:

def getDate() {
return new Date().format('yyyyMMddHHmmss')
}

You can define in your build.gradle custom functions and variables.

def versionMajor = 3


def buildTime() {
def df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'") // you can change it
df.setTimeZone(TimeZone.getTimeZone("UTC"))
return df.format(new Date())
}

Then you can use it:

android {
defaultConfig {
versionName "${versionMajor}-beta-build-${buildTime()}"
}
}

or if you want to add it in you versionNameSuffix

beta {
versionNameSuffix "-beta-build-${buildTime()}"
}

Also, do not forget to add import as Gradle first line:

import java.text.SimpleDateFormat;
...

You can test

task timenow {
println(new Date().getTime())
}

Run gradle: gradle timenow

See details. Place it on the top-level build

ext {
configuration = [
appName          : "vBulletin",
applicationId    : "com.vbulletin",
minSdkVersion    : 14,
targetSdkVersion : 19,
compileSdkVersion: 19,
versionCode      : 6,
versionName      : "1.3.6",
buildToolsVersion: "25.0.0",
]


}


task createBrand {
appConfig.applicationId = appConfig.applicationId + ".${brand}"
appConfig.versionCode = new Date().getTime()
appConfig.versionName = version
}
for simple one row solution define this property above android section


final BUILD_DATE = new Date().format('yyyy_MM_dd_HHmm')


and then


android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion


defaultConfig {
applicationId APPLICATION_ID
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.compileSdkVersion
versionName GIT_TAG_NAME
versionCode GIT_COMMIT_COUNT
setProperty("archivesBaseName",`enter code here` "com-appname-$BUILD_DATE-$versionName")
}
}

This is for Kotlin DSL (build.gradle.kts):

// At the top of the file
import java.time.LocalDate
import java.time.format.DateTimeFormatter.*


// ...


android {
buildTypes {
getByName("debug") { // OR simply  debug {  in newer versions of Android Gradle Plugin (AGP)
val date = LocalDate.now().toString()
// OR val date = LocalDate.now().format(ISO_LOCAL_DATE)
// OR val date = LocalDate.now().format(ofPattern("yyyy-MM-dd"))
versionNameSuffix = date
}
}
}

You could also extract the date creation to a function:

android {
buildTypes {
getByName("debug") {
versionNameSuffix = generateDate()
}
}
}


fun generateDate() = LocalDate.now().toString()
// OR fun generateDate() = LocalDate.now().format(ISO_LOCAL_DATE)
// OR fun generateDate() = LocalDate.now().format(ofPattern("yyyy-MM-dd"))