✅ Google Play Console 디버그 기호 문제 해결
🤔 문제: 디버그 기호가 업로드되지 않았다는 메시지
메시지 의미
이 App Bundle 아티팩트 유형은 네이티브 코드를 포함하며
아직 디버그 기호가 업로드되지 않았습니다.
•
네이티브 코드: Google Play Services (AdMob, Firebase 등)에 포함된 C/C++ 코드
•
디버그 기호: 크래시 발생 시 스택 트레이스를 읽을 수 있게 해주는 기호 정보
•
경고: 필수는 아니지만, 앱 크래시 분석 시 도움이 됨
📊 네이티브 코드 출처
앱의 다음 의존성에서 네이티브 코드가 포함됩니다:
1.
Google Play Services (AdMob)
implementation(libs.play.services.ads)
2.
Firebase Crashlytics
implementation(libs.firebase.crashlytics.ktx)
3.
기타 Google GMS 라이브러리
◦
kotlinx-coroutines-play-services
◦
play-services-wearable (Wear 앱의 경우)
✅ 해결 방법 3가지
방법 1: 자동 업로드 (권장) ⭐
build.gradle.kts의 release buildType에 다음 추가:
buildTypes {
release {
// ...기존 설정...
// Google Play에 디버그 기호 자동 업로드 활성화
ndk {
debugSymbolLevel = "full"
}
}
}
장점:
•
✅ 가장 간단함
•
✅ 자동으로 처리됨
•
✅ Google Play에 자동 업로드
이 방법으로 이미 수정됨!
방법 2: 수동 업로드
1.
App Bundle 빌드
./gradlew bundleRelease
2.
기호 파일 추출
# Android Studio Terminal에서
./gradlew extractDebugSymbols
3.
Google Play Console 업로드
◦
릴리즈 관리 → 앱 릴리즈 → 기호 파일 → 업로드
장점:
•
수동 제어 가능
•
특정 버전에만 기호 업로드 가능
단점:
•
매번 수동으로 해야 함
방법 3: 기호 업로드 비활성화 (비권장)
기호 생성 자체를 비활성화:
ndk {
debugSymbolLevel = "none" // 기호 없음
}
주의: 크래시 분석이 어려워지므로 권장하지 않음!
📈 debugSymbolLevel 옵션
ndk {
debugSymbolLevel = "full" // 전체 기호 (권장)
// debugSymbolLevel = "partial" // 부분 기호
// debugSymbolLevel = "none" // 기호 없음
}
옵션
기호 크기
분석
권장
full
크게 증가
최상
⭐⭐⭐
partial
중간 증가
양호
⭐⭐
none
변화 없음
불가
비권장
🔍 적용 결과
수정 전
⚠️ 이 App Bundle 아티팩트 유형은 네이티브 코드를 포함하며
아직 디버그 기호가 업로드되지 않았습니다.
수정 후 (예상)
✅ 디버그 기호가 포함된 App Bundle
크래시 분석 시 스택 트레이스 해석 가능
🚀 다음 단계
1. 빌드
# Clean Build
Build → Clean Project
Build → Build Bundle(s) / APK(s) → Build Bundle(s)
2. App Bundle 생성
./gradlew bundleRelease
출력 위치: app/release/app-release.aab
3. Google Play Console 업로드
1.
Google Play Console 접속
2.
릴리즈 관리 → 프로덕션
3.
App Bundle 업로드
4.
"기호 파일 포함됨" 확인
📋 기호 파일 정보
기호 파일이란?
•
목적: 컴파일된 바이너리 코드를 읽을 수 있는 형태로 변환
•
포함 정보:
◦
함수/메서드 이름
◦
변수 이름
◦
파일 경로 및 줄 번호
◦
소스 코드 위치
크래시 분석 예시
기호 없음:
java.lang.NullPointerException
at cohttp://m.google.android.gms.internal.ads.a.b(Unknown Source)
at cohttp://m.google.android.gms.internal.ads.c.d(Unknown Source)
기호 있음:
java.lang.NullPointerException
at cohttp://m.google.android.gms.internal.ads.zzaki.zza(zzaki.java:123)
at cohttp://m.google.android.gms.internal.ads.zzalc.onAdLoaded(zzalc.java:456)
at AdMobInterstitialAd.onLoadComplete(AdMobInterstitialAd.java:789)
⚠️ 주의사항
빌드 크기 증가
debugSymbolLevel = "full" 사용 시:
- App Bundle 크기: +30~50%
- 실제 앱 크기: 변화 없음 (기호는 Play Console에만 저장)
Google Play에서의 기호 관리
최대 저장: 90일 (자동 삭제)
수동 삭제: Google Play Console에서 가능
다운로드: Android Studio Profiler에서 자동 다운로드
🔗 관련 설정 파일
build.gradle.kts
buildTypes {
release {
// ... 기존 설정 ...
ndk {
debugSymbolLevel = "full"
}
}
}
Gradle 7.1+ (또는 AGP 7.1+) 필수
•
현재 프로젝트: AGP 9.0.1 ✅ (지원함)
📚 추가 최적화
1. ProGuard 규칙 확인
# proguard-rules.pro
-keepattributes SourceFile,LineNumberTable
-renamesourcefileattribute SourceFile
2. Gradle 캐시
# 캐시 초기화
./gradlew clean
3. 재빌드
./gradlew bundleRelease --refresh-dependencies
✅ 최종 체크리스트
•
[x] ndk { debugSymbolLevel = "full" } 추가
•
[ ] ./gradlew clean 실행
•
[ ] ./gradlew bundleRelease 빌드
•
[ ] app/release/app-release.aab 생성 확인
•
[ ] Google Play Console에 업로드
•
[ ] "기호 파일 포함됨" 메시지 확인
🎯 결론
이 해결책으로:
•
✅ 앱 크래시 분석 개선
•
✅ Google Play Console 경고 제거
•
✅ 사용자 문제 신속한 대응
•
✅ 앱 품질 향상
수정 완료 시간: 2026-02-16
AGP 버전: 9.0.1
상태: ✅ build.gradle.kts 수정 완료
'모바일 앱(안드로이드)' 카테고리의 다른 글
| 프레시틱 (Freshtic) 개발 작업 히스토리 (0) | 2026.02.18 |
|---|---|
| 2025년 GitHub 개발자 활동 회고 및 2026년 다짐 (2) | 2025.12.31 |
| 🦾 Android | 재오픈 시 Android 뷰가 사라지는 문제 원인 분석 & 복구 자동화 (0) | 2025.12.27 |
| ⌚ Android Wear & Phone 연동 디버깅 | 고도 수집, 상태 동기화, Hilt 순환 참조 정리 (1) | 2025.12.25 |
| 🦾 Android/Wear | Health Connect 권한·동기화 안정화 + 걸음수 단일화 및 그래프 정리 (1) | 2025.12.23 |