如何将日期构建附加到 gradle 上的 versionNameSuffix

Posted

技术标签:

【中文标题】如何将日期构建附加到 gradle 上的 versionNameSuffix【英文标题】:how append date build to versionNameSuffix on gradle 【发布时间】:2013-10-10 22:34:49 【问题描述】:

我正在使用 android Studio,我需要在我的 Android build.gradle 文件上的 versionNameSuffix 上附加一个后缀。我有三种不同的构建类型,我只需要将日期时间附加到我的“测试版”版本。我的实际文件是:

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 或类似的名称。有什么想法吗?

【问题讨论】:

【参考方案1】:
beta 
    packageNameSuffix ".beta"
    versionNameSuffix "-beta" + "-build" + getDate()
    signingConfig signingConfigs.debug


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

精简:

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

【讨论】:

配置好build.gradle后如何生成apk? como 通用 el apk despues?【参考方案2】:

您可以在 build.gradle 中定义自定义函数和变量。

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())

然后就可以使用了:

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

或者如果你想在你的 versionNameSuffix 中添加它

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

【讨论】:

versionNameSuffix 已损坏至少一年 buildTime 加下划线:不支持内部方法。 如何导入 Date()?【参考方案3】:

另外,别忘了在第一行添加 import as Gradle:

import java.text.SimpleDateFormat;
...

【讨论】:

或避免悲伤并使用 Date().format("yyyyMMdd'T'HHmmssZ")【参考方案4】:
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")
    

【讨论】:

【参考方案5】:

我不熟悉 Android Studio,但我会假设 Gradle 的行为正常。在你的构建项目配置中添加这样的东西应该可以解决问题:

allProjects 
    gradle.taskGraph.whenReady  taskGraph ->
        versionNameSuffix += '-build' + // Java/Groovy code to produce the timestamp formatted the way you want
    

【讨论】:

【参考方案6】:

你可以测试

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

运行 gradle:gradle timenow

查看详情。将其放在顶层构建中

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

【讨论】:

【参考方案7】:

这适用于 Kotlin DSL (build.gradle.kts):

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

// ...

android 
    buildTypes 
        getByName("debug") 
            val date = LocalDate.now().toString()
            val date2 = LocalDate.now().format(ISO_LOCAL_DATE)
            val date3 = LocalDate.now().format(ofPattern("yyyy-MM-dd"))
            versionNameSuffix = date
        
    

您还可以将创建日期提取到函数中:

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"))

【讨论】:

以上是关于如何将日期构建附加到 gradle 上的 versionNameSuffix的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 gradle 将时间戳附加到生成的 jar 中?

Gradle 学习总结—— 如何将 Spring Boot 构建工具从 Maven 迁移到 Gradle

Gradle 学习总结—— 如何将 Spring Boot 构建工具从 Maven 迁移到 Gradle

在哪里或如何找到 BizTalk 服务器的数据库以将它们附加到 SQL 服务器?

如何将本地 Maven m2 作为属性传递给 Gradle?

如何将 UNIX 命令日期附加到 echo 语句