Wie wird das Erstellungsdatum an versionNameSuffix auf gradle angehängt?

74

Ich verwende Android Studio und muss ein Suffix an das versionNameSuffix in meiner Android build.gradle-Datei anhängen. Ich habe drei verschiedene buildTypes und muss nur die datetime an meine "Beta" -Version anhängen. Meine eigentliche Datei lautet:

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

für die Prüfung und automatisches deploy, ich brauche wie eine endgültige version zu bekommen: 0.7.5-beta-build20131004, 0.7.5-beta-build1380855996oder so ähnlich. Irgendwelche Ideen?

Rodrigo Amaro Reveco
quelle

Antworten:

166
beta {
    packageNameSuffix ".beta"
    versionNameSuffix "-beta" + "-build" + getDate()
    signingConfig signingConfigs.debug
}

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

Kondensiert:

def getDate() {
    return new Date().format('yyyyMMddHHmmss')
}
Rodrigo Amaro Reveco
quelle
Wie erstelle ich apk nach der Konfiguration von build.gradle?
Herbert
como generar el apk verzweifelt?
Bruno Sosa Fast Tag
36

Sie können in Ihrem build.gradle benutzerdefinierte Funktionen und Variablen definieren.

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

Dann können Sie es verwenden:

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

oder wenn Sie es in Ihrem versionNameSuffix hinzufügen möchten

beta {
    versionNameSuffix "-beta-build-${buildTime()}"      
}
Gabriele Mariotti
quelle
versionNameSuffix ist seit mindestens einem Jahr
kaputt
buildTimewird unterstrichen: Innere Methoden werden nicht unterstützt.
CoolMind
9

Vergessen Sie auch nicht, den Import als erste Zeile von Gradle hinzuzufügen:

import java.text.SimpleDateFormat;
...
ivan.panasiuk
quelle
1
oder vermeiden Sie die Trauer und verwenden Sie das Format Date (). ("yyyyMMdd'T'HHmmssZ")
kbro
3
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")
    }
}
Yogaboy
quelle
1

Ich bin mit Android Studio nicht vertraut, aber ich gehe davon aus, dass sich Gradle wie gewohnt verhält. Das Hinzufügen von so etwas zu Ihrer Build-Projektkonfiguration sollte den Trick tun:

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

Sie können testen

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

Gradle ausführen: Gradle Timenow

Siehe Einzelheiten. Platziere es auf dem obersten 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
}
Tuan Nguyen
quelle