build-release

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Android Release Build Skill

Android发布构建Skill

Google Play Store 배포를 위한 Android App Bundle(AAB) 프로덕션 빌드를 생성하는 스킬입니다.
这是一款用于生成Google Play Store发布所需的Android App Bundle(AAB)生产构建包的Skill。

빌드 전 체크리스트

构建前检查清单

필수 확인 사항

必查事项

  • Keystore 파일 준비 완료
  • gradle.properties에 서명 정보 설정
  • versionCode 증가 확인
  • versionName 업데이트 확인
  • ProGuard/R8 규칙 설정
  • 디버그 코드 제거 (Log, debuggable 등)
  • 准备好Keystore文件
  • 在gradle.properties中配置签名信息
  • 确认versionCode已递增
  • 确认versionName已更新
  • 配置ProGuard/R8规则
  • 移除调试代码(Log、debuggable等)

build.gradle.kts 릴리즈 설정 확인

确认build.gradle.kts的发布配置

kotlin
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")
        }
    }
}
kotlin
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 빌드 명령어

AAB构建命令

기본 릴리즈 빌드

基础发布构建

bash
./gradlew bundleRelease
bash
./gradlew bundleRelease

클린 빌드 (권장)

清理构建(推荐)

bash
./gradlew clean bundleRelease
bash
./gradlew clean bundleRelease

빌드 + 테스트

构建+测试

bash
./gradlew clean test bundleRelease
bash
./gradlew clean test bundleRelease

특정 flavor 빌드

特定flavor构建

bash
undefined
bash
undefined

productFlavors가 있는 경우

存在productFlavors时

./gradlew bundleProductionRelease ./gradlew bundleFreeRelease ./gradlew bundlePaidRelease
undefined
./gradlew bundleProductionRelease ./gradlew bundleFreeRelease ./gradlew bundlePaidRelease
undefined

빌드 출력 경로

构建输出路径

app/build/outputs/bundle/release/app-release.aab
app/build/outputs/bundle/release/app-release.aab

빌드 최적화 옵션

构建优化选项

병렬 빌드

并行构建

bash
./gradlew bundleRelease --parallel
bash
./gradlew bundleRelease --parallel

빌드 캐시 사용

使用构建缓存

bash
./gradlew bundleRelease --build-cache
bash
./gradlew bundleRelease --build-cache

메모리 설정 (gradle.properties)

内存配置(gradle.properties)

properties
org.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError
org.gradle.parallel=true
org.gradle.caching=true
properties
org.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError
org.gradle.parallel=true
org.gradle.caching=true

AAB 검증

AAB验证

bundletool로 APK 추출 테스트

使用bundletool提取APK测试

bash
undefined
bash
undefined

bundletool 설치 (macOS)

安装bundletool(macOS)

brew install bundletool
brew install bundletool

APK 세트 생성

生成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 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
undefined
bundletool install-apks --apks=app-release.apks
undefined

AAB 정보 확인

查看AAB信息

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

앱 크기 분석

应用大小分析

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

Play Console 업로드

Play Console上传

Google Play Console CLI (추천)

Google Play Console CLI(推荐)

bash
undefined
bash
undefined

설치

安装

pip install google-play-scraper
pip install google-play-scraper

또는 Gradle Play Publisher 플러그인 사용

或使用Gradle Play Publisher插件

./gradlew publishReleaseBundle
undefined
./gradlew publishReleaseBundle
undefined

Gradle Play Publisher 설정

Gradle Play Publisher配置

kotlin
// 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)
}
kotlin
// 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)
}

멀티 모듈 프로젝트

多模块项目

전체 모듈 빌드

全模块构建

bash
./gradlew :app:bundleRelease
bash
./gradlew :app:bundleRelease

Dynamic Feature Module 포함

包含Dynamic Feature Module

bash
./gradlew :app:bundleRelease \
  :feature1:bundleRelease \
  :feature2:bundleRelease
bash
./gradlew :app:bundleRelease \
  :feature1:bundleRelease \
  :feature2:bundleRelease

문제 해결

问题排查

일반적인 빌드 오류

常见构建错误

에러원인해결
Keystore was tampered with잘못된 비밀번호비밀번호 확인
No matching signing config서명 설정 누락signingConfigs 확인
OutOfMemoryError메모리 부족gradle.properties에서 Xmx 증가
R8 errorProGuard 규칙 문제proguard-rules.pro 수정
错误原因解决方法
Keystore was tampered with密码错误检查密码
No matching signing config缺少签名配置检查signingConfigs
OutOfMemoryError内存不足在gradle.properties中增加Xmx值
R8 errorProGuard规则问题修改proguard-rules.pro

ProGuard/R8 디버깅

ProGuard/R8调试

bash
undefined
bash
undefined

매핑 파일 생성 확인

确认映射文件已生成

ls app/build/outputs/mapping/release/
ls app/build/outputs/mapping/release/

규칙 테스트

测试规则

./gradlew :app:minifyReleaseWithR8 --info
undefined
./gradlew :app:minifyReleaseWithR8 --info
undefined

리소스 축소 문제

资源压缩问题

kotlin
// 특정 리소스 유지
android {
    buildTypes {
        release {
            // res/raw/keep.xml 사용
        }
    }
}
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" />
kotlin
// 保留特定资源
android {
    buildTypes {
        release {
            // 使用res/raw/keep.xml
        }
    }
}
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 빌드 스크립트

CI/CD构建脚本

GitHub Actions 예시

GitHub Actions示例

yaml
- 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 }}
yaml
- 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) 권장
  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용 빌드해줘"
  • "번들 빌드해줘"
  • "배포용 빌드 생성해줘"
当用户提出以下请求时,可使用本Skill:
  • "帮我构建AAB"
  • "帮我生成发布构建包"
  • "帮我构建生产构建包"
  • "帮我生成Play Store发布用构建包"
  • "帮我生成包构建"
  • "帮我生成发布用构建包"