Android App Bundle(AAB) 프로덕션 빌드를 생성합니다. AAB 빌드, 릴리즈 빌드, 프로덕션 빌드, Play Store 배포용 빌드 요청 시 사용됩니다.
Install
npx skillscat add ingpdw/pdw-android-dev-tool/build-release Install via the SkillsCat registry.
About this skill
This skill generates an Android App Bundle (AAB) production build for Play Store deployment. It automates the release build process by executing Gradle commands with proper signing configuration, ProGuard optimization, and resource shrinking enabled. Developers should use it when preparing an Android app for Google Play Store submission or when a production-ready AAB file is required.
SKILL.md
Android Release Build Skill
Google Play Store 배포를 위한 Android App Bundle(AAB) 프로덕션 빌드를 생성하는 스킬입니다.
빌드 전 체크리스트
필수 확인 사항
- Keystore 파일 준비 완료
- gradle.properties에 서명 정보 설정
- versionCode 증가 확인
- versionName 업데이트 확인
- ProGuard/R8 규칙 설정
- 디버그 코드 제거 (Log, debuggable 등)
build.gradle.kts 릴리즈 설정 확인
android {
defaultConfig {
versionCode = 10
versionName = "1.2.0"
}
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
signingConfig = signingConfigs.getByName("release")
}
}
}AAB 빌드 명령어
기본 릴리즈 빌드
./gradlew bundleRelease클린 빌드 (권장)
./gradlew clean bundleRelease빌드 + 테스트
./gradlew clean test bundleRelease특정 flavor 빌드
# productFlavors가 있는 경우
./gradlew bundleProductionRelease
./gradlew bundleFreeRelease
./gradlew bundlePaidRelease빌드 출력 경로
app/build/outputs/bundle/release/app-release.aab빌드 최적화 옵션
병렬 빌드
./gradlew bundleRelease --parallel빌드 캐시 사용
./gradlew bundleRelease --build-cache메모리 설정 (gradle.properties)
org.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError
org.gradle.parallel=true
org.gradle.caching=trueAAB 검증
bundletool로 APK 추출 테스트
# bundletool 설치 (macOS)
brew install bundletool
# APK 세트 생성
bundletool build-apks \
--bundle=app/build/outputs/bundle/release/app-release.aab \
--output=app-release.apks \
--ks=keystore/release-key.jks \
--ks-key-alias=my-key-alias \
--ks-pass=pass:<password>
# 연결된 디바이스에 설치
bundletool install-apks --apks=app-release.apksAAB 정보 확인
bundletool dump manifest --bundle=app-release.aab
bundletool dump resources --bundle=app-release.aab앱 크기 분석
bundletool get-size total --bundle=app-release.aabPlay Console 업로드
Google Play Console CLI (추천)
# 설치
pip install google-play-scraper
# 또는 Gradle Play Publisher 플러그인 사용
./gradlew publishReleaseBundleGradle Play Publisher 설정
// build.gradle.kts
plugins {
id("com.github.triplet.play") version "3.8.4"
}
play {
serviceAccountCredentials.set(file("play-service-account.json"))
track.set("internal") // internal, alpha, beta, production
defaultToAppBundles.set(true)
}멀티 모듈 프로젝트
전체 모듈 빌드
./gradlew :app:bundleReleaseDynamic Feature Module 포함
./gradlew :app:bundleRelease \
:feature1:bundleRelease \
:feature2:bundleRelease문제 해결
일반적인 빌드 오류
| 에러 | 원인 | 해결 |
|---|---|---|
| Keystore was tampered with | 잘못된 비밀번호 | 비밀번호 확인 |
| No matching signing config | 서명 설정 누락 | signingConfigs 확인 |
| OutOfMemoryError | 메모리 부족 | gradle.properties에서 Xmx 증가 |
| R8 error | ProGuard 규칙 문제 | proguard-rules.pro 수정 |
ProGuard/R8 디버깅
# 매핑 파일 생성 확인
ls app/build/outputs/mapping/release/
# 규칙 테스트
./gradlew :app:minifyReleaseWithR8 --info리소스 축소 문제
// 특정 리소스 유지
android {
buildTypes {
release {
// res/raw/keep.xml 사용
}
}
}<!-- res/raw/keep.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@layout/some_layout,@drawable/some_image" />CI/CD 빌드 스크립트
GitHub Actions 예시
- name: Build Release AAB
run: |
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > keystore.jks
./gradlew bundleRelease
env:
RELEASE_STORE_FILE: keystore.jks
RELEASE_STORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
RELEASE_KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
RELEASE_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}빌드 완료 후
- AAB 파일 확인:
app/build/outputs/bundle/release/app-release.aab - 매핑 파일 백업:
app/build/outputs/mapping/release/mapping.txt - Play Console 업로드
- 내부 테스트 트랙에서 먼저 테스트
- 단계적 출시 (Staged Rollout) 권장
사용 예시
사용자가 다음과 같이 요청하면 이 스킬을 활용합니다:
- "AAB 빌드해줘"
- "릴리즈 빌드 만들어줘"
- "프로덕션 빌드해줘"
- "Play Store용 빌드해줘"
- "번들 빌드해줘"
- "배포용 빌드 생성해줘"