일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 그누보드
- jw player
- 코드이그나이터
- 설정
- codeigniter3
- CI3
- Database
- 웹 프로그래밍
- php
- 후크
- 안드로이드
- mysql
- function
- 함수
- phpDocumentor
- API
- APK
- CodeIgniter
- 옵션표
- html
- FCM
- 헬퍼
- config
- rairen
- javascript
- jquery
- 영카트
- 라이렌
- ajax
- MSsql
- Today
- Total
프로그램 개발서
[안드로이드 스튜디오]APK, AAB 버전 자동 관리하기 본문
안녕하세요?
안드로이드 스튜디오에서 APK, AAB 파일 생성 시 자동 관리하는 방법에 대한 글입니다.
이전에도 작성을 했는데, 현재 수정이 되지 않아 정리하여 다시 작성을 하게되었습니다.
build.gradle 파일과 version.properties 파일을 이용하여 자동 관리를 할 겁니다.
우선 버전 정보를 기록할 파일을 준비합니다.
일단 /app 폴더 내에 version.properties 파일을 생성합니다.
그리고 버전 프로퍼티 파일 내에는 아래와 같은 코드를 작성합니다.
VERSION_BUILD=0
VERSION_RELEASE=0
VERSION_DATE=0
VERSION_RUN=0
VERSION_PATCH=0
이러면 버전 정보를 기록할 파일이 준비된 겁니다.
이후 빌드 그레이들 파일을 수정을 하면됩니다.
빌드 그레이들 파일에서 제일 하단에 아래 코드를 작성합니다.
static def getDate() {
def date = new Date()
def formattedDate = date.format('yyyyMMdd')
return formattedDate
}
버전기록 일시를 위한 함수 입니다.
이제 파일 내에서 android { } 내에 코드를 작성할 겁니다.
코드는 아래와 같습니다.
//File 불러오기
def versionPropsFile = file('version.properties')
//File Read 여부 체크
if (versionPropsFile.canRead()) {
def Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
def UPDATE = 1
def versionRelease = versionProps['VERSION_RELEASE'].toInteger()
def versionBuild = versionProps['VERSION_BUILD'].toInteger()
def versionPatch = versionProps['VERSION_PATCH'].toInteger()
def versionRun = versionProps['VERSION_RUN'].toInteger()
def runTasks = gradle.startParameter.taskNames
// Release 할 경우 COUNT UP
if (':app:assembleRelease' in runTasks || ':app:bundleRelease' in runTasks) {
versionRelease = versionRelease + 1
}
// Build만 할 경우 COUNT UP
if (':app:assembleDebug' in runTasks || ':app:bundleDebug' in runTasks) {
versionBuild = versionBuild + 1
}
// Patch 날짜가 기존과 다를 경우 COUNT IP
def versionDate = getDate()
if(versionProps['VERSION_DATE'] != versionDate){
versionPatch = versionPatch + 1
}
// 어떤 것을 행하던 무조건 COUNT UP
versionRun = versionRun + 1
versionProps['VERSION_RELEASE'] = versionRelease.toString()
versionProps['VERSION_BUILD'] = versionBuild.toString()
versionProps['VERSION_DATE'] = versionDate.toString()
versionProps['VERSION_PATCH'] = versionPatch.toString()
versionProps['VERSION_RUN'] = versionRun.toString()
//update 된 설정값들을 다시 version.properties 파일에 쓰기
versionProps.store(versionPropsFile.newWriter(), null)
signingConfigs {
release {
}
}
compileSdkVersion 31
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "[앱 아이디]"
minSdkVersion 16
targetSdkVersion 31
versionCode versionRelease
versionName "${UPDATE}.${versionRelease}.${versionBuild}.${versionPatch}.${versionRun} Release"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
//aab 파일이 생성되는 명칭
def aabName = "${UPDATE}.${versionRelease}.${versionBuild}.${versionPatch}.${versionRun}"
setProperty("archivesBaseName", aabName)
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
buildscript {
repositories {
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
}
dependencies {
// Add this line
classpath 'com.google.gms:google-services:4.3.10'
}
}
allprojects {
repositories {
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
}
}
applicationVariants.all { variant ->
variant.outputs.all { output ->
output.outputFileName = "${UPDATE}.${versionRelease}.${versionBuild}.${versionPatch}.${versionRun}-Release.apk"
}
}
} else {
throw new GradleException("Could not read version.properties!")
}
여기서 커스텀할 변수는 UPDATE 가 됩니다.
release 마다 VERSION_RELEASE 값이 1씩 오르고,
debug 마다 VERSION_BUILD , 작업일이 다르면 VERSION_PATCH가 오릅니다.
RUN은 무조건 1씩 오르게끔 되어있구요.
저는 UPDATE 변수를 대대적으로 앱이 변경 될 경우 사용하기위해 UPDATE 변수를 두었습니다.
표시하고싶은 버전정보가 있으면 추가적으로 추가도 가능하니 변경해도 무방합니다.
이전 글과 차이점은 아래 내용을 보시면됩니다.
변경 전
//apk 파일이 생성되는 folder 및 파일이름
def relativeRootDir = output.packageApplication.outputDirectory.toPath().relativize(rootDir.toPath()).toFile()
def apkName = "${UPDATE}.${versionRelease}.${versionBuild}.${versionPatch}.${versionRun}-Release.apk"
output.outputFileName = new File("$relativeRootDir/app/release", apkName)
변경 후
output.outputFileName = "${UPDATE}.${versionRelease}.${versionBuild}.${versionPatch}.${versionRun}-Release.apk"
ouput -> 안에 코드가 달라졌습니다
rootDir 값이 못가져오는 상황이 있어 경로까지 지정이 아닌 파일명만 변경하는 코드로 변경했습니다.
'Android' 카테고리의 다른 글
[WebView][FCM] 토큰 받은 후 웹뷰 로드 (0) | 2021.04.06 |
---|---|
[안드로이드] 웹뷰에서 a링크로 액티비티 열기 (0) | 2021.03.22 |