Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

Google Play Console 디버그 기호 문제 해결

Billcorea 2026. 2. 16. 23:36

✅ 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 수정 완료

반응형