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がまったくありません。
問題は私には明らかですが、それを解決する方法がわかりません。
ご意見をお聞かせください。
[〜#〜]編集済み[〜#〜]
アプリのバージョンを動的に定義するには、次のように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()
を自動的に使用します。
問題は解決しませんが、別の解決策になる可能性があります。
ルートプロジェクト内でgradle.propertiesを使用して、以下を定義できます。
VERSION_NAME=1.2.1
VERSION_CODE=26
その後、build.gradleで次を使用できます。
versionName project.VERSION_NAME
versionCode Integer.parseInt(project.VERSION_CODE)
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}"
}
....
}