build-release
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAndroid 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 bundleReleasebash
./gradlew bundleRelease클린 빌드 (권장)
清理构建(推荐)
bash
./gradlew clean bundleReleasebash
./gradlew clean bundleRelease빌드 + 테스트
构建+测试
bash
./gradlew clean test bundleReleasebash
./gradlew clean test bundleRelease특정 flavor 빌드
特定flavor构建
bash
undefinedbash
undefinedproductFlavors가 있는 경우
存在productFlavors时
./gradlew bundleProductionRelease
./gradlew bundleFreeRelease
./gradlew bundlePaidRelease
undefined./gradlew bundleProductionRelease
./gradlew bundleFreeRelease
./gradlew bundlePaidRelease
undefined빌드 출력 경로
构建输出路径
app/build/outputs/bundle/release/app-release.aabapp/build/outputs/bundle/release/app-release.aab빌드 최적화 옵션
构建优化选项
병렬 빌드
并行构建
bash
./gradlew bundleRelease --parallelbash
./gradlew bundleRelease --parallel빌드 캐시 사용
使用构建缓存
bash
./gradlew bundleRelease --build-cachebash
./gradlew bundleRelease --build-cache메모리 설정 (gradle.properties)
内存配置(gradle.properties)
properties
org.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError
org.gradle.parallel=true
org.gradle.caching=trueproperties
org.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError
org.gradle.parallel=true
org.gradle.caching=trueAAB 검증
AAB验证
bundletool로 APK 추출 테스트
使用bundletool提取APK测试
bash
undefinedbash
undefinedbundletool 설치 (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>
--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>
--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
undefinedbundletool install-apks --apks=app-release.apks
undefinedAAB 정보 확인
查看AAB信息
bash
bundletool dump manifest --bundle=app-release.aab
bundletool dump resources --bundle=app-release.aabbash
bundletool dump manifest --bundle=app-release.aab
bundletool dump resources --bundle=app-release.aab앱 크기 분석
应用大小分析
bash
bundletool get-size total --bundle=app-release.aabbash
bundletool get-size total --bundle=app-release.aabPlay Console 업로드
Play Console上传
Google Play Console CLI (추천)
Google Play Console CLI(推荐)
bash
undefinedbash
undefined설치
安装
pip install google-play-scraper
pip install google-play-scraper
또는 Gradle Play Publisher 플러그인 사용
或使用Gradle Play Publisher插件
./gradlew publishReleaseBundle
undefined./gradlew publishReleaseBundle
undefinedGradle 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:bundleReleasebash
./gradlew :app:bundleReleaseDynamic Feature Module 포함
包含Dynamic Feature Module
bash
./gradlew :app:bundleRelease \
:feature1:bundleRelease \
:feature2:bundleReleasebash
./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 수정 |
| 错误 | 原因 | 解决方法 |
|---|---|---|
| Keystore was tampered with | 密码错误 | 检查密码 |
| No matching signing config | 缺少签名配置 | 检查signingConfigs |
| OutOfMemoryError | 内存不足 | 在gradle.properties中增加Xmx值 |
| R8 error | ProGuard规则问题 | 修改proguard-rules.pro |
ProGuard/R8 디버깅
ProGuard/R8调试
bash
undefinedbash
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 }}빌드 완료 후
构建完成后
- AAB 파일 확인:
app/build/outputs/bundle/release/app-release.aab - 매핑 파일 백업:
app/build/outputs/mapping/release/mapping.txt - Play Console 업로드
- 내부 테스트 트랙에서 먼저 테스트
- 단계적 출시 (Staged Rollout) 권장
- 检查AAB文件:
app/build/outputs/bundle/release/app-release.aab - 备份映射文件:
app/build/outputs/mapping/release/mapping.txt - 上传至Play Console
- 先在内部测试轨道测试
- 推荐分阶段发布(Staged Rollout)
사용 예시
使用示例
사용자가 다음과 같이 요청하면 이 스킬을 활용합니다:
- "AAB 빌드해줘"
- "릴리즈 빌드 만들어줘"
- "프로덕션 빌드해줘"
- "Play Store용 빌드해줘"
- "번들 빌드해줘"
- "배포용 빌드 생성해줘"
当用户提出以下请求时,可使用本Skill:
- "帮我构建AAB"
- "帮我生成发布构建包"
- "帮我构建生产构建包"
- "帮我生成Play Store发布用构建包"
- "帮我生成包构建"
- "帮我生成发布用构建包"