이 페이지에서는 자주 묻는 질문(FAQ)에 대한 문제 해결 도움말과 답변을 제공합니다.
Crashlytics 사용에 관한 질문이 있습니다. 만약
원하는 내용을 찾을 수 없거나 추가 도움이 필요한 경우
Firebase 지원
일반적인 문제 해결 및 FAQ
문제 표에 일부 문제에 대해 다른 형식(가끔 '변형')이 표시됨
문제 표에 두 가지 다른 문제 형식이 표시될 수 있습니다.
(Firebase 콘솔에서 확인) 또한 일부 문제에는 '변형'이라는 특징이 있을 수 있습니다. 이유는 다음과 같습니다.
2023년 초, Google에서는 이벤트 그룹화를 위한 향상된 분석 엔진, 업데이트된 디자인, 새로운 문제(예: 변형)에 대한 일부 고급 기능을 출시했습니다. 자세한 내용은 최근 블로그 게시물을 참조하세요. 아래에서 주요 내용을 확인할 수 있습니다.
Crashlytics는 앱의 모든 이벤트 (예: 비정상 종료, 심각하지 않음,
ANR)를 파악하고 문제라는 이벤트 그룹을 만들어
문제에는 일반적인 장애점이 있습니다
이벤트를 이러한 문제로 그룹화하기 위해 이제 향상된 분석 엔진이 스택 트레이스의 프레임, 예외 메시지, 오류 코드, 기타 플랫폼 또는 오류 유형 특성 등 이벤트의 여러 측면을 살펴봅니다.
그러나 이 이벤트 그룹 내에서 장애로 이어지는 스택 트레이스가 다를 수 있습니다. 스택 트레이스가 다르면 근본 원인이 달라질 수 있습니다.
문제 내에서 발생할 수 있는 이러한 차이를 나타내기 위해 이제 문제 내에 변형을 만듭니다. 각 변형은 문제에서 동일한 장애점 및 유사한 스택 트레이스가 있는 이벤트의 하위 그룹입니다. 변형을 사용하면 문제 내에서 가장 일반적인 스택 트레이스를 디버깅하고 서로 다른 근본 원인으로 인해 장애가 발생했는지 파악할 수 있습니다.
개선된 기능은 다음과 같습니다.
문제 행에 개선된 메타데이터 표시 이제 앱의 문제를 더 쉽게 파악하고 분류할 수 있습니다.
중복 문제 감소 줄 번호를 변경해도 새 문제가 발생하지 않습니다.
다양한 근본 원인이 있는 복잡한 문제를 더 손쉽게 디버깅 변형을 사용하여 문제 내에서 가장 일반적인 스택 트레이스를 디버깅합니다.
더 의미 있는 알림과 신호 새로운 문제가 실제로는 새로운 버그를 나타냅니다.
더욱 강력한 검색 각 문제에 예외 유형 및 패키지 이름과 같이 검색 가능성이 더 높은 메타데이터가 포함됩니다.
개선된 기능이 적용되는 방식은 다음과 같습니다.
앱에서 새로운 이벤트가 수신되면 기존 문제와 일치하는지 확인합니다.
일치하는 항목이 없으면 이벤트에 더 스마트한 이벤트 그룹화 알고리즘을 자동으로 적용하고 개선된 메타데이터 설계로 새로운 문제를 만듭니다.
Google에서 진행 중인 이벤트 그룹화에 대한 첫 번째 대규모 업데이트입니다. 의견이 있거나 문제가 발생하면 신고를 제출하여 알려주시기 바랍니다.
비정상 종료가 발생하지 않은 측정항목 또는 신속 알림이 표시되지 않음
비정상 종료가 발생하지 않은 측정항목 (예: 비정상 종료가 발생하지 않은 사용자 및 세션)이 표시되지 않는 경우
신속 알림 및/또는 신속 알림을 사용하려면
Crashlytics SDK v18.6.0 이상 (또는 Firebase BoM v32.6.0 이상)
탐색경로 로그가 표시되지 않음
탐색경로 로그가 표시되지 않는 경우 앱의 Google Analytics 구성을 확인하는 것이 좋습니다.
다음 요건을 충족해야 합니다.
특히 최소 다음 버전의
Google Analytics용 Firebase SDK: Android — v17.2.3 이상(BoM v24.7.1 이상)
Android 11 이상에서만 ANR이 보고되는 이유는 무엇인가요?
Crashlytics는 다음을 실행하는 기기의 Android 앱에 대한 ANR 보고를 지원합니다.
Android 11 이상 ANR을 수집하는 데 사용하는 기본 API
(getHistoryProcessExitReasons)
SIGQUIT 또는 watchdog 기반 접근 방식보다 더 안정적입니다. 이 API는 Android 11 이상 기기에서만 사용할 수 있습니다.
일부 ANR에서 BuildId가 누락된 이유는 무엇인가요?
일부 ANR에서 BuildId가 누락된 경우 다음과 같이 문제를 해결합니다.
최신 Crashlytics Android SDK 및
Crashlytics Gradle 플러그인 버전
Android 11 및 일부 Android 12 ANR에서 BuildId가 누락되면 오래된 SDK, Gradle 플러그인 또는 둘 다를 사용하고 있을 수 있습니다.
이러한 ANR의 BuildId를 올바르게 수집하려면 다음 버전을 사용해야 합니다.
앱의 공유 라이브러리에 BuildId만 누락되었다면 공유 라이브러리의 표준 기본 위치를 사용하지 않았을 가능성이 높습니다. 만약
이 경우 Crashlytics는
연결된 BuildId입니다. 공유 라이브러리에는 표준 위치를 사용하는 것이 좋습니다.
빌드 프로세스 중에 BuildId를 제거하지 않도록 합니다.
다음 문제 해결 팁은 ANR 및 네이티브 충돌 모두에 적용됩니다.
바이너리에서 readelf -n을 실행하여 BuildId가 있는지 확인합니다. BuildId가 없으면 빌드 시스템의 플래그에 -Wl,--build-id를 추가합니다.
APK 크기를 줄이기 위해 의도치 않게 BuildId를 제거하지 않았는지 확인합니다.
라이브러리의 제거된 버전과 제거되지 않은 버전을 유지하는 경우 코드에서 올바른 버전을 가리켜야 합니다.
차이점
Crashlytics 대시보드의 ANR 보고서와
Google Play Console
Google Play와
Crashlytics 이것은 ANR 데이터를 수집하고 보고하는 메커니즘에 차이가 있기 때문입니다. Crashlytics는 앱이 실행될 때 ANR을 보고합니다.
Android Vitals는 ANR이 발생한 후에 ANR 데이터를 전송합니다.
또한 Crashlytics는 다음을 실행하는 기기에서 발생하는 ANR만 표시합니다.
Android 11 이상(Google Play는 Android 11 이상, Android:
Google Play 서비스 및 데이터 수집 동의가 수락되었습니다.
차이점
Crashlytics 대시보드와 logcat의 NDK 스택 트레이스 간
LLVM 및 GNU 도구 모음에는 읽기 전용의 고유한 기본값과 처리가 있습니다.
일관되지 않은 스택 트레이스가 생성될 수 있는 앱 바이너리 세그먼트
Firebase 콘솔에서 확인할 수 있습니다. 이 문제를 완화하려면 빌드 프로세스에 다음 링커 플래그를 추가하세요.
LLVM 도구 모음의 lld 링커를 사용하는 경우 다음을 추가합니다.
-Wl,--no-rosegment
GNU 도구 모음의 ld.gold 링커를 사용하는 경우 다음을 추가합니다.
-Wl,--rosegment
스택 트레이스 불일치가 계속 발생하거나 도구 모음과 관련된 플래그가 없는 경우 대신 빌드 프로세스에 다음을 추가해 보세요.
-fno-omit-frame-pointer
NDK에 자체 Breakpad 기호 파일 생성기 바이너리를 사용하려면 어떻게 해야 하나요?
Crashlytics 플러그인은
맞춤설정된 Breakpad 기호 파일 생성기.
Breakpad 기호 파일을 생성하는 데 자체 바이너리를 사용하려는 경우(
예를 들어, 빌드 체인에 모든 네이티브 실행 파일을
소스)는 선택적 symbolGeneratorBinary 확장 속성을 사용하여
실행 파일의 경로를 지정합니다.
다음 두 가지 방법 중 하나를 사용하여 Breakpad 기호 파일 생성기 바이너리에 대한 경로를 지정할 수 있습니다.
옵션 1: build.gradle 파일의 firebaseCrashlytics 확장 프로그램을 통해 경로 지정
앱 수준 build.gradle.kts 파일에 다음을 추가합니다.
Gradle 플러그인 v3.0.0 이상
android{buildTypes{release{configure<CrashlyticsExtension>{nativeSymbolUploadEnabled=true// Add these optional fields to specify the path to the executablesymbolGeneratorType="breakpad"breakpadBinary=file("/PATH/TO/BREAKPAD/DUMP_SYMS")}}}}
낮은 플러그인 버전
android{// ...buildTypes{// ...release{// ...firebaseCrashlytics{// existing; required for either symbol file generatornativeSymbolUploadEnabledtrue// Add this optional new block to specify the path to the executablesymbolGenerator{breakpad{binaryfile("/PATH/TO/BREAKPAD/DUMP_SYMS")}}}}}
옵션 2: Gradle 속성 파일의 속성 줄을 통해 경로 지정
com.google.firebase.crashlytics.breakpadBinary 속성을 사용하여 실행 파일의 경로를 지정할 수 있습니다.
Gradle 속성 파일을 수동으로 업데이트하거나 명령줄을 통해 파일을 업데이트할 수 있습니다. 예를 들어 명령줄을 통해 경로를 지정하려면 다음과 같은 명령어를 사용합니다.
프로젝트에서 Google Mobile Ads SDK와 함께 Crashlytics를 사용하는 경우
충돌 보고자가 작동을 방해하고 있을 때
예외 핸들러를 등록하는 중입니다. 문제를 해결하려면 다음에서 비정상 종료 보고를 사용 중지하세요.
disableSDKCrashReporting를 호출하여 Mobile Ads SDK를 호출합니다.
내 BigQuery 데이터 세트는 어디에 있나요?
Crashlytics을(를) BigQuery에 연결하면 생성되는 새 데이터 세트가
현재 거주지에 관계없이 미국에 자동으로 위치한 경우
Firebase 프로젝트
플랫폼 지원
Crashlytics는 armeabi를 지원하나요?
Firebase Crashlytics NDK는 ARMv5 (armeabi)를 지원하지 않습니다.
이 ABI에 대한 지원은 NDK r17부터 삭제되었습니다.
회귀된 문제
회귀된 문제란 무엇인가요?
이전에 문제를 종료했지만 회귀가 발생한 경우
Crashlytics님이 문제가 다시 발생했다는 새로운 신고를 받습니다.
Crashlytics은(는) 다음과 같은 작업을 수행할 수 있도록 회귀된 문제를 자동으로 다시 엽니다.
앱에 맞게 문제를 해결할 수 있습니다.
다음은 Crashlytics가
문제를 회귀로 바꾸면 됩니다.
Crashlytics에 처음으로 비정상 종료에 관한 비정상 종료 보고서가 제공됩니다.
'A'. Crashlytics에서 비정상 종료에 해당하는 문제 (문제 'A')를 엽니다.
개발자가 이 버그를 신속하게 수정하고 문제 'A'를 종료한 후 앱의 새 버전을 출시합니다.
Crashlytics님이 문제 'A'에 관한 또 다른 신고를 받음 종료 후
있습니다.
Crashlytics님이 알고 있는 앱 버전의 신고인지 여부
문제를 종료했을 때 (버전에서 비정상 종료를 보냈음을 의미)
어떤 비정상 종료도 전혀 보고하지 않는 경우 Crashlytics는
있습니다 문제가 종료된 상태로 유지됩니다.
Crashlytics에서 발생하지 않은 앱 버전에서 발생한 신고인 경우
언제 문제를 종료했는지
비정상 종료와 관련해 어떠한 비정상 종료 보고서도 보낸 적이 전혀 없는 경우
Crashlytics은(는) 문제가 회귀된 것으로 간주하고
있습니다.
문제가 회귀하면 회귀 감지 알림을 전송하고
문제에 회귀 신호를 전달하여 Crashlytics가
문제를 다시 열었습니다. 회귀 알고리즘으로 인해 문제가 다시 열리지 않도록 하려면 문제를 종료하는 대신 '숨기세요'.
이전 앱 버전의 회귀된 문제가 표시되는 이유는 무엇인가요?
비정상 종료 보고서를 보낸 적이 없는 이전 앱 버전에서 보고서를 생성한 경우
문제를 종료하면 Crashlytics에서 문제를 고려합니다.
회귀되어 문제가 다시 열립니다
이러한 상황은 다음과 같은 경우에 발생할 수 있습니다. 개발자가 버그를 수정하고 앱의 새 버전을 출시했지만 버그가 수정되지 않은 이전 버전에 아직 사용자가 있습니다. 만약 문제가 종료되었을 때 이전 버전 중 하나에서 비정상 종료 보고서를 보낸 적이 없는 경우 해당 사용자에게 버그가 발생하기 시작하면 비정상 종료 보고서가 회귀된 문제를 트리거합니다.
회귀 알고리즘으로 인해 문제가 다시 열리지 않도록 하려면 문제를 종료하는 대신 '숨기세요'.