2014-01-24 7 views
31

Ich versuche Gradle zu verwenden, um den Namen der App festzulegen. Bitte schauen Sie sich diese Schnipsel build.gradle:Android-App-Version mit Gradle setzen

android { 
    ... 
    defaultConfig { 
     ... 
     versionCode getVersionCode() 
     versionName getVersionName() 
     ... 
    } 
    ... 
} 

... 

int getVersionCode() { 
    return 1 
} 

def getVersionName() { 
    return "1.0" 
} 

Android Studio sagt

'versionCode' cannot be applied to 'java.lang.Integer' 
    'versionName' cannot be applied to 'java.lang.String' 

und wenn ich die App auf einem Gerät installieren hat es keine version und versionüberhaupt.

Das Problem ist klar für mich, aber ich weiß nicht, wie ich es lösen soll.
Bitte Beratung.

Antwort

24

EDITED

Um Ihre App-Version dynamisch zu definieren, eine benutzerdefinierte Methode mit def angeben und es nennen, wie zum Beispiel:

def computeVersionName() { 
    return "2.0" 
} 

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.0.0" 

    defaultConfig { 
     versionCode 12 
     versionName computeVersionName() 
     minSdkVersion 16 
     targetSdkVersion 16 
    } 
} 

Siehe here für mehr.

Stellen Sie sicher, dass keine Funktionsnamen verwendet werden, die Konflikte mit vorhandenen GETTERN im angegebenen Bereich verursachen könnten. Zum Beispiel defaultConfig { ... } Aufruf getVersionName() wird automatisch die Getter defaultConfig.getVersionName() anstelle der benutzerdefinierten Methode.

+0

Sie für die Antwort danken. Ich muss auch versionCode und versionName Werte an anderen Orten von build.gradle verwenden. Wenn ich es so fest codiere, kann ich das nicht machen. Deshalb benutze ich Methoden. – Slava

+0

Macht die 'def' Methode vor der' android' Klammer alles etwas? – keithmaxx

+0

leider nicht. – Slava

46

Es löst Ihr Problem nicht, aber es kann eine andere Lösung sein.

Sie gradle.properties in Ihrem Root-Projekt verwenden können und definieren:

VERSION_NAME=1.2.1 
VERSION_CODE=26 

Dann in Ihrem build.gradle können Sie:

versionName project.VERSION_NAME 
versionCode Integer.parseInt(project.VERSION_CODE) 
+8

Hinweis: Dies funktionierte großartig bis zur Aktualisierung, um neuere Build-Tools zu verwenden! Mir ist danach aufgefallen, dass mein Versionscode nicht gesetzt war und Integer.parseInt in Android Studio als unbekannt markiert ist. Jetzt ist dies erforderlich: ** project.VERSION_CODE.toInteger() ** – sunadorer

9

Hier ist ein build.gradle, die ich bin Verwendung basierend auf Ideen von JakeWharton:

apply plugin: 'com.android.application' 
def versionMajor = 1 
def versionMinor = 2 
def versionPatch = 0 

def gitVersion() { 
    def counter = 0 
    def process = "git rev-list master --first-parent --count".execute() 
    return process.text.toInteger() 
} 

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 19 
    buildToolsVersion '19.1.0' 


    defaultConfig { 
     applicationId 'my.project.com' 
     minSdkVersion 14 
     targetSdkVersion 19 
     versionCode gitVersion() 
     versionName "${versionMajor}.${versionMinor}.${versionPatch}" 
    } 
    .... 
} 
+0

Hey Phileo99 http://StackOverflow.com/Questions/25556005/Git-Rev-List-Not-Working-in-Android-Studio-Build-Gradle –