これが私の以前の答えの近代化です。これはGradle 4.4とAndroid Studio 3.1.1で実行されています。
このスクリプトの機能:
- 存在しない場合はversion.propertiesファイルを作成します(賛成票の下のPaul Cantrellの回答です。ここで、この回答が気に入った場合にアイデアを得ました)
- ビルド、デバッグリリースごと、またはAndroid Studioの実行ボタンを押すたびに、VERSION_BUILD数が増加します。
- リリースをアセンブルするたびに、PlayストアのAndroid バージョンコードが増加し、パッチ番号が増加します。
- おまけ:ビルドが完了したら、APKを
projectDir/apk
にコピーして、アクセスしやすくします。
このスクリプトは、AppName-v1.3.4.apkのv1.3.4 (123)
ようなapkファイルのようなバージョン番号を作成します。
Major version ⌄ ⌄ Build version
v1.3.4 (123)
Minor version ⌃|⌃ Patch version
メジャーバージョン:大きな変更を行うには手動で変更する必要があります。
マイナーバージョン:大きな変更がわずかに少ない場合は、手動で変更する必要があります。
パッチバージョン:実行時に増加gradle assembleRelease
ビルドバージョン:すべてのビルドを増やします
バージョン番号:パッチバージョンと同じです。これは、新しいAPKをアップロードするたびにPlayストアが増やす必要があるバージョンコード用です。
以下の1〜3のラベルが付いたコメントの内容を変更するだけで、スクリプトが残りを実行します。:)
android {
compileSdkVersion 27
buildToolsVersion '27.0.3'
def versionPropsFile = file('version.properties')
def value = 0
Properties versionProps = new Properties()
if (!versionPropsFile.exists()) {
versionProps['VERSION_PATCH'] = "0"
versionProps['VERSION_NUMBER'] = "0"
versionProps['VERSION_BUILD'] = "-1" // I set it to minus one so the first build is 0 which isn't super important.
versionProps.store(versionPropsFile.newWriter(), null)
}
def runTasks = gradle.startParameter.taskNames
if ('assembleRelease' in runTasks) {
value = 1
}
def mVersionName = ""
def mFileName = ""
if (versionPropsFile.canRead()) {
versionProps.load(new FileInputStream(versionPropsFile))
versionProps['VERSION_PATCH'] = (versionProps['VERSION_PATCH'].toInteger() + value).toString()
versionProps['VERSION_NUMBER'] = (versionProps['VERSION_NUMBER'].toInteger() + value).toString()
versionProps['VERSION_BUILD'] = (versionProps['VERSION_BUILD'].toInteger() + 1).toString()
versionProps.store(versionPropsFile.newWriter(), null)
// 1: change major and minor version here
mVersionName = "v1.0.${versionProps['VERSION_PATCH']}"
// 2: change AppName for your app name
mFileName = "AppName-${mVersionName}.apk"
defaultConfig {
minSdkVersion 21
targetSdkVersion 27
applicationId "com.example.appname" // 3: change to your package name
versionCode versionProps['VERSION_NUMBER'].toInteger()
versionName "${mVersionName} Build: ${versionProps['VERSION_BUILD']}"
}
} else {
throw new FileNotFoundException("Could not read version.properties!")
}
if ('assembleRelease' in runTasks) {
applicationVariants.all { variant ->
variant.outputs.all { output ->
if (output.outputFile != null && output.outputFile.name.endsWith('.apk')) {
outputFileName = mFileName
}
}
}
}
task copyApkFiles(type: Copy){
from 'build/outputs/apk/release'
into '../apk'
include mFileName
}
afterEvaluate {
assembleRelease.doLast {
tasks.copyApkFiles.execute()
}
}
signingConfigs {
...
}
buildTypes {
...
}
}
================================================== ==
最初の回答:
versionNameも自動的に増加させたい。したがって、これは私にとって完璧に機能したCommonsWareの回答への追加にすぎません。これは私のために働くものです
defaultConfig {
versionCode code
versionName "1.1." + code
minSdkVersion 14
targetSdkVersion 18
}
編集:
私は少し怠惰なので、バージョン管理をできるだけ自動的に機能させたいと思っています。私が欲しいのは、ビルドごとに増加するビルドバージョンを持つことですが、バージョン番号とバージョン名は、リリースビルドを作成したときにのみ増加します。
これは私が過去1年間使用してきたものであり、基本はCommonsWareの回答と私の以前の回答に加えていくつかのものです。これにより、次のバージョン管理が行われます。
バージョン名:1.0.5(123) -> Major.Minor.Patch(ビルド)、MajorおよびMinorは手動で変更されます。
build.gradle:
...
android {
compileSdkVersion 23
buildToolsVersion '23.0.1'
def versionPropsFile = file('version.properties')
if (versionPropsFile.canRead()) {
def Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
def value = 0
def runTasks = gradle.startParameter.taskNames
if ('assemble' in runTasks || 'assembleRelease' in runTasks || 'aR' in runTasks) {
value = 1;
}
def versionMajor = 1
def versionMinor = 0
def versionPatch = versionProps['VERSION_PATCH'].toInteger() + value
def versionBuild = versionProps['VERSION_BUILD'].toInteger() + 1
def versionNumber = versionProps['VERSION_NUMBER'].toInteger() + value
versionProps['VERSION_PATCH'] = versionPatch.toString()
versionProps['VERSION_BUILD'] = versionBuild.toString()
versionProps['VERSION_NUMBER'] = versionNumber.toString()
versionProps.store(versionPropsFile.newWriter(), null)
defaultConfig {
versionCode versionNumber
versionName "${versionMajor}.${versionMinor}.${versionPatch} (${versionBuild}) Release"
minSdkVersion 14
targetSdkVersion 23
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
def fileNaming = "apk/RELEASES"
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
output.outputFile = new File(getProject().getRootDir(), "${fileNaming}-${versionMajor}.${versionMinor}.${versionPatch}-${outputFile.name}")
}
}
}
}
} else {
throw new GradleException("Could not read version.properties!")
}
...
}
...
'assemble'、'assembleRelease'または'aR'を使用してターミナルからプロジェクトをアセンブルすると、パッチとバージョンコードが増加します。これにより、プロジェクトルートにapk / RELEASEという新しいフォルダーが作成されるため、ビルド/出力を調べる必要がありません。 / more / more / moreでAPKを見つけます。
バージョンプロパティは次のようにする必要があります。
VERSION_NUMBER=1
VERSION_BUILD=645
VERSION_PATCH=1
明らかに0から始めます。:)