web-dev-qa-db-fra.com

Définissez Android version de l'application à l'aide de Gradle

J'essaie d'utiliser Gradle pour définir le nom de l'application. Veuillez regarder cet extrait de build.gradle:

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

...

int getVersionCode() {
    return 1
}

def getVersionName() {
    return "1.0"
}

Android Studio dit

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

et lorsque j'installe l'application sur un appareil, elle n'a pas du tout versionCode et versionName.

Le problème est clair pour moi mais je ne sais pas comment le résoudre.
Veuillez conseiller.

34
Slava

[~ # ~] modifié [~ # ~]

Afin de définir dynamiquement la version de votre application, spécifiez une méthode personnalisée avec def et appelez-la, comme telle:

def computeVersionName() {
    return "2.0"
}

Android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

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

Voir ici pour en savoir plus.

Assurez-vous de ne pas utiliser de noms de fonctions qui pourraient entrer en conflit avec des getters existants dans la portée donnée. Par exemple, defaultConfig { ... } Appelant getVersionName() utilisera automatiquement le getter defaultConfig.getVersionName() au lieu de la méthode personnalisée.

28
keithmaxx

Cela ne résout pas votre problème, mais cela peut être une solution différente.

Vous pouvez utiliser gradle.properties dans votre projet racine et définir:

VERSION_NAME=1.2.1
VERSION_CODE=26

Ensuite, dans votre build.gradle, vous pouvez utiliser:

versionName project.VERSION_NAME
versionCode Integer.parseInt(project.VERSION_CODE)
48
Gabriele Mariotti

Voici un build.gradle que j'utilise basé sur des idées de 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}"
    }
    ....
}
11
Phileo99

Si vous utilisez un fichier gradle.properties Pour stocker les versions de build partagées, assurez-vous d'utiliser la fonction toInteger() pour le code de version, les versions compilées/min et sd cible.

Voir cet article pour plus d'informations: https://medium.com/@ALi.muzaffar/gradle-configure-variables-for-all-Android-project-modules-in-one-place-5a6e56cd384e#.yl1x0ziqe

0
metch