이번 포스팅에서는 프로젝트의 빌드넘버를 자동으로 증가시키는 법에 대해 알아보도록 하겠습니다.
버전넘버와 빌드넘버
버전넘버
소프트웨어의 기능이 변할때마다 그것을 구분하기 위해서 버전넘버를 사용하는데요, 일반적인 규칙은 1.0.0 과 같이 세자리로 결정을 합니다.
첫째자리는 뒤로 되돌릴 수 없는 수준의 큰 변경이 있을때, 둘째자리는 여러가지 새로운 기능이 추가되었을 때 증가를 시키고, 셋째자리는 기능이 추가되지는 않지만 버그가 수정되었을 때 증가를 시킵니다.
그래서 첫째자리는 메이저 버전, 둘째자리는 마이너 버전, 셋째자리는 패치버전이라고 하는 이름이 있습니다.
다만 이것은 꼭 지켜야 하는 규칙은 아니고, 날짜를 버전넘버로 사용하는 소프트웨어도 있습니다.
빌드넘버
빌드넘버란 어떤 버전을 출시할 때 여러번 반복해서 빌드를 할 때마다 숫자를 증가시키는 방법으로 사용하는 숫자인데요, 그러니까 버전넘버가 동일하다고 해도 여러가지 서로다른 빌드넘버를 가질 수 있습니다.
그래서 빌드를 수행할 때마다 어쨌든 변화가 있어야 되는데, 일반적으로는 증가시키는 형식으로 빌드넘버를 사용을 하구요, 보통은 이 빌드넘버를 일반 사용자가 알 필요가 없기 때문에 이걸 보여주지는 않지만, 개중에는 보여주는 소프트웨어도 있습니다. 윈도우같은 경우는 이 빌드넘버를 프로그램 안에서 확인할 수도 있습니다.
그런데 이 빌드넘버는 빌드를 수행할 때 하나씩 증가를 시켜야 하는데 안드로이드 스튜디오에서는 이걸 자동으로 증가시켜주지 않기 때문에 이 부분을 자동으로 증가시켜주는 기구를 프로젝트에 적용하는 법에 대해 설명하도록 하겠습니다.
프로그램 작성
app 레벨의 gradle에서 빌드넘버는 versionCode가 됩니다. 그래서 빌드를 한 번 할 때마다 versionCode는 증가가 되야 하구요, versionName은 기능 추가가 있을때마다 그때그때 개발자가 필요에 의해서 증가를 시켜주면 되겠죠.
android{// 저장된 값을 불러오는 부분
defversionPropsFile=file('version.properties')defversionBuilddefversionNumberif(versionPropsFile.canRead()){defversionProps=newProperties()versionProps.load(newFileInputStream(versionPropsFile))versionBuild=versionProps['VERSION_BUILD'].toInteger()versionNumber=versionProps['VERSION_NUMBER'].toString()}else{thrownewFileNotFoundException("Could not read version.properties!")}// 읽어온 빌드넘버를 증가시키는 부분
ext.autoIncrementBuildNumber={if(versionPropsFile.canRead()){defversionProps=newProperties()versionProps.load(newFileInputStream(versionPropsFile))versionBuild=versionProps['VERSION_BUILD'].toInteger()+1versionProps['VERSION_BUILD']=versionBuild.toString()versionProps.store(versionPropsFile.newWriter(),null)}else{thrownewFileNotFoundException("Could not read version.properties!")}}// 함수를 실행시키는 부분
gradle.taskGraph.whenReady{taskGraph->if(taskGraph.hasTask(assembleDebug)){autoIncrementBuildNumber()}elseif(taskGraph.hasTask(assembleRelease)){autoIncrementBuildNumber()}}compileSdkVersion29// 수정한 내용을 앱에 반영해 줌
defaultConfig{applicationId"com.example.autobuildnum"minSdkVersion21targetSdkVersion29versionCodeversionBuildversionNameversionNumbertestInstrumentationRunner"androidx.test.runner.AndroidJUnitRunner"}}