build-release

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=true

AAB 검증

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.apks

AAB 정보 확인

bundletool dump manifest --bundle=app-release.aab
bundletool dump resources --bundle=app-release.aab

앱 크기 분석

bundletool get-size total --bundle=app-release.aab

Play Console 업로드

Google Play Console CLI (추천)

# 설치
pip install google-play-scraper

# 또는 Gradle Play Publisher 플러그인 사용
./gradlew publishReleaseBundle

Gradle 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:bundleRelease

Dynamic 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 }}

빌드 완료 후

  1. AAB 파일 확인: app/build/outputs/bundle/release/app-release.aab
  2. 매핑 파일 백업: app/build/outputs/mapping/release/mapping.txt
  3. Play Console 업로드
  4. 내부 테스트 트랙에서 먼저 테스트
  5. 단계적 출시 (Staged Rollout) 권장

사용 예시

사용자가 다음과 같이 요청하면 이 스킬을 활용합니다:

  • "AAB 빌드해줘"
  • "릴리즈 빌드 만들어줘"
  • "프로덕션 빌드해줘"
  • "Play Store용 빌드해줘"
  • "번들 빌드해줘"
  • "배포용 빌드 생성해줘"
Weekly Installs
3
First Seen
Feb 7, 2026
Installed on
cline3
gemini-cli3
github-copilot3
codex3
cursor3
opencode3