Подтвердить что ты не робот

Установите версию приложения для Android с помощью Gradle

Я пытаюсь использовать Gradle для установки имени приложения. Пожалуйста, посмотрите на этот фрагмент build.gradle:

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

...

int getVersionCode() {
    return 1
}

def getVersionName() {
    return "1.0"
}

Android Studio говорит

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

и когда я устанавливаю приложение на устройство, он вообще не имеет версии Code и versionName.

Проблема ясна для меня, но я не знаю, как ее решить.
Пожалуйста, совет.

4b9b3361

Ответ 1

EDITED

Чтобы динамически определять вашу версию приложения, укажите собственный метод с именем def и вызовите его:

def computeVersionName() {
    return "2.0"
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

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

Подробнее см. здесь.

Не используйте имена функций, которые могут противоречить существующим геттерам в данной области. Например, defaultConfig { ... } вызов getVersionName() будет автоматически использовать getter defaultConfig.getVersionName() вместо настраиваемого метода.

Ответ 2

Это не решит вашу проблему, но это может быть другое решение.

Вы можете использовать gradle.properties внутри вашего корневого проекта и определить:

VERSION_NAME=1.2.1
VERSION_CODE=26

Затем в вашем build.gradle вы можете использовать:

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

Ответ 3

Вот build.gradle, который я использую на основе идей из 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}"
    }
    ....
}

Ответ 4

Если вы используете файл gradle.properties для хранения версий разделяемой сборки, заставьте использовать функцию toInteger() для кода версии, скомпилированных/мин и целевых версий sd.

См. это сообщение для получения дополнительной информации: https://medium.com/@ali.muzaffar/gradle-configure-variables-for-all-android-project-modules-in-one-place-5a6e56cd384e#.yl1x0ziqe