방법 1.
이 방법은 인터넷에 많이 알려진 방법입니다.
간단한 코드로 APK/AAB 모두에 적용 가능하지만 한 가지 주의할 점이 있습니다.
archivesBaseName = "{앱 이름}-${versionName}(${versionCode})"
아래와 같이 시간과 같은 변하는 값을 추가하게 되면 빌드 성능 저하가 발생할 수 있습니다.
def formattedDate = new Date().format('yyyyMMddHHmm')
archivesBaseName = "{앱 이름}-${versionName}(${versionCode})-${formattedDate}"
일반적으로 Gradle은 빌드 캐시를 사용하여 동일한 작업을 반복으로 실행하지 않도록 최적화합니다.
그러나 archivesBaseName이 매번 달라지면 Gradle은 입력 값이 변경 되었다고 판단하여 캐시를 재사용하지 않습니다.
방법 2.
해당 방법으로 파일명 변경시 서명이 달라져 앱 배포가 불가합니다.
이름 변경 후 재서명하는 방식으로 업데이트 예정입니다.
만약 APK/AAB에 시간을 추가해야하는 경우에는 아래와 같이 output을 변경하는 방법을 사용하는게 좋습니다.
이는 Gradle의 설정을 변경하는 것이 아닌 추출된 파일의 이름을 변경하는 작업이므로, 빌드 캐싱에 영향을 주지 않습니다.
import com.android.build.gradle.internal.api.BaseVariantOutputImpl
import com.android.build.gradle.internal.tasks.FinalizeBundleTask
android {
/* ... */
applicationVariants.all { variant ->
// APK 이름 변경
def formattedDate = new Date().format('MM_dd_HH:mm')
variant.outputs.all { output ->
if (output instanceof BaseVariantOutputImpl) {
output.outputFileName = "{앱 이름}_${variant.name}_${variant.versionName}(${variant.versionCode})_${formattedDate}.apk"
}
}
// AAB 이름 변경
def bundleTaskName = "sign${variant.flavorName.capitalize()}${variant.buildType.name.capitalize()}Bundle"
tasks.named(bundleTaskName, FinalizeBundleTask) { task ->
def file = task.finalBundleFile.get().asFile
def finalFile = new File(
file.parentFile,
"{앱 이름}_${variant.name}_${variant.versionName}(${variant.versionCode})_${formattedDate}.aab"
)
task.finalBundleFile.set(finalFile)
}
}
}
'안드로이드 > 이론' 카테고리의 다른 글
[ 안드로이드 ] Kotlin-Serialization 옵션 정리 (2) | 2024.10.04 |
---|---|
[ 안드로이드 ] LocalBroadcaseManager Deprecated 대응 (0) | 2024.07.12 |
[ 안드로이드 ] 앱 내에 개발자 모드 추가하기 3 (0) | 2024.05.16 |
[ 안드로이드 ] 액티비티 배경 투명하게 설정 (+ 투명 배경 유지 안되는 이슈 해결) (0) | 2024.03.25 |
[ 안드로이드 ] Multi ViewType RecyclerView ViewHolder 순서 고정하기 (0) | 2024.01.14 |