web-dev-qa-db-ja.com

Gradleを使用してAndroidアプリのバージョンを設定

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'

デバイスにアプリをインストールすると、versionCodeとversionNameがまったくありません。

問題は私には明らかですが、それを解決する方法がわかりません。
ご意見をお聞かせください。

34
Slava

[〜#〜]編集済み[〜#〜]

アプリのバージョンを動的に定義するには、次のようにdefでカスタムメソッドを指定して呼び出します。

def computeVersionName() {
    return "2.0"
}

Android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

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

詳細については here を参照してください。

指定されたスコープ内の既存のゲッターと競合する可能性のある関数名を使用しないようにしてください。例えば、getVersionName()を呼び出すdefaultConfig { ... }は、カスタムメソッドの代わりにゲッターdefaultConfig.getVersionName()を自動的に使用します。

28
keithmaxx

問題は解決しませんが、別の解決策になる可能性があります。

ルートプロジェクト内でgradle.propertiesを使用して、以下を定義できます。

VERSION_NAME=1.2.1
VERSION_CODE=26

その後、build.gradleで次を使用できます。

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

JakeWharton のアイデアに基づいて使用しているbuild.gradleは次のとおりです。

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