아래에서 볼 수있는 이전 답변의 현대화가 있습니다. 이것은 Gradle 4.4 및 Android Studio 3.1.1에서 실행됩니다 .
이 스크립트의 기능 :
- 존재하지 않는 경우 version.properties 파일을 생성 합니다 (이 답변이 마음에 들면 아이디어를 얻은 아래 Paul Cantrell의 답변에 찬성 투표)
- 각 빌드, 디버그 릴리스 또는 Android 스튜디오에서 실행 버튼을 누를 때마다 VERSION_BUILD 번호가 증가합니다.
- 릴리스를 조립할 때마다 플레이 스토어 의 Android 버전 코드 가 증가하고 패치 번호가 증가합니다.
- 보너스 : 빌드가 완료되면 APK를
projectDir/apk
에 복사하여 더 쉽게 액세스 할 수 있습니다.
이 스크립트는 AppName-v1.3.4.apkv1.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
}
편집하다:
조금 게으 르기 때문에 가능한 한 자동으로 버전 관리가 작동하기를 원합니다. 내가 원하는 것은 각 빌드마다 증가 하는 빌드 버전 을 갖는 반면, 버전 번호 와 버전 이름 은 릴리스 빌드를 만들 때만 증가합니다.
이것은 내가 작년에 사용했던 것입니다. 기본은 CommonsWare의 답변과 이전 답변에 더하여 몇 가지 더 있습니다. 결과적으로 다음과 같은 버전이 지정됩니다.
버전 이름 : 1.0.5 (123) -> Major.Minor.Patch (Build), 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으로 시작합니다. :)