비정상 종료 스택 트레이스 가독화 또는 기호화

Android에서 비정상 종료 및 ANR이 발생하면 다운된 시점까지 프로그램에서 호출된 일련의 중첩 함수를 스냅샷으로 보여주는 스택 트레이스가 생성됩니다. 이러한 스냅샷은 소스의 문제를 식별하고 해결하는 데 도움이 됩니다.

자바를 사용하여 앱 또는 게임을 개발했으며 ProGuard를 사용하여 앱을 최적화 및 난독화한 경우 Play Console에서 앱의 각 버전에 대한 ProGuard 매핑 파일을 업로드할 수 있습니다. C++와 같은 네이티브 코드를 사용하여 앱 또는 게임을 개발했다면 Play Console에서 앱의 각 버전에 대한 디버그 기호 파일을 업로드할 수 있습니다. 이렇게 하면 비정상 종료 및 ANR을 분석하고 해결하기가 더 쉬워집니다.

중요: 자바로 컴파일된 앱의 가독화에는 ReTrace 호환 매핑 파일만 지원됩니다. 이는 ProGuard 또는 R8에서 사용하는 형식과 동일합니다.

1단계: 가독화 또는 기호화 파일 생성

앱의 특정 버전에 대해 앱의 비정상 종료 및 ANR을 가독화 또는 기호화하려면 먼저 동일한 앱 버전에 필요한 파일을 생성해야 합니다. 가독화 또는 기호화가 작동하려면 앱의 새 버전마다 파일을 생성하고 업로드해야 합니다.

자바: ProGuard 매핑 파일 생성

자바 스택 트레이스를 가독화하려면 먼저 ProGuard 매핑 파일을 생성해야 합니다. 방법은 Google Developers 사이트를 참조하세요.

네이티브: 디버그 기호 파일 생성

Android Gradle 플러그인 버전 4.1 이상

프로젝트가 Android App Bundle을 빌드하는 경우 디버그 기호 파일을 자동으로 포함할 수 있습니다. 이 파일을 포함하려면 앱의 build.gradle 파일에 다음을 추가합니다.

  • android.defaultConfig.ndk.debugSymbolLevel = 'FULL'

참고: 디버그 기호 파일은 300MB로 제한됩니다. 디버그 기호의 사용량이 너무 크면 FULL 대신 SYMBOL_TABLE을 사용하여 파일 크기를 줄입니다.

프로젝트가 APK를 빌드하는 경우 위의 build.gradle 빌드 설정을 사용하여 디버그 기호 파일을 별도로 생성합니다. 2단계: 가독화 또는 기호화 파일 업로드에 설명된 대로 디버그 기호 파일을 Google Play Console에 수동으로 업로드합니다. 빌드 프로세스의 일부로 Android Gradle 플러그인은 다음 프로젝트 위치에 이 파일을 출력합니다.

  • app/build/outputs/native-debug-symbols/variant-name/native-debug-symbols.zip

Android Gradle 플러그인 버전 4.0 이하 (및 기타 빌드 시스템)

Android Gradle 플러그인은 App Bundle 또는 APK의 빌드 프로세스의 일부로 제거되지 않은 라이브러리의 사본을 프로젝트 디렉터리에 보관합니다. 이 디렉터리는 다음과 유사한 구조를 따릅니다.

app/build/intermediates/cmake/universal/release/obj

├── armeabi-v7a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── arm64-v8a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── x86/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

└── x86_64/

    ├── libgameengine.so

    ├── libothercode.so

    └── libvideocodec.so

참고: 다른 빌드 시스템을 사용하는 경우, 위와 같은 필수 구조를 가진 디렉터리에 제거되지 않은 라이브러리를 저장하도록 수정할 수 있습니다.

  1. 다음 디렉터리의 콘텐츠를 압축합니다.
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -r symbols.zip .
  2. 아래의 2단계: 가독화 또는 기호화 파일 업로드에 설명된 대로 symbols.zip 파일을 Play Console에 수동으로 업로드합니다.

디버그 기호 파일은 300MB로 제한됩니다. 파일이 너무 큰 경우 .so 파일에 기호 테이블(함수 이름) 및 DWARF 디버깅 정보(파일 이름 및 코드 줄)가 포함되었기 때문일 수 있습니다. 이는 코드를 기호화하는 데 필요하지 않으며 다음 명령어를 실행하여 삭제할 수 있습니다.

  • $OBJCOPY --strip-debug lib.so lib.so.sym

참고: $OBJCOPY는 제거할 ABI의 특정 버전을 가리킵니다. 예: ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy

2단계: 가독화 또는 기호화 파일 업로드

앱의 특정 버전에 대해 앱의 비정상 종료 및 ANR을 가독화 또는 기호화하려면 앱의 각 버전에 대한 가독화 또는 기호화 파일을 업로드해야 합니다.

중요: 이 단계는 APK를 사용하는 개발자에게만 필요합니다. App Bundle 및 Android Gradle 플러그인 버전 4.1 이상을 사용하는 경우 별도의 조치를 취할 필요가 없습니다. 번들에서 가독화 파일을 자동으로 가져오므로 3단계: 가독화된 비정상 종료 스택 트레이스 보기로 건너뛸 수 있습니다. Android 개발자 사이트에서 App Bundle에 관해 자세히 알아볼 수 있습니다.

Play Console을 사용한 파일 업로드

가독화 또는 기호화 파일을 업로드하는 방법은 다음과 같습니다.

  1. Play Console을 엽니다.
  2. 앱을 선택합니다.
  3. 왼쪽 메뉴에서 출시 > App Bundle 탐색기를 선택합니다.
  4. 오른쪽 상단의 선택도구를 사용하여 관련 아티팩트를 선택합니다.
  5. 다운로드 탭을 선택하고 '애셋' 섹션까지 아래로 스크롤합니다.
  6. 매핑 파일의 업로드 화살표 또는 디버그 기호를 클릭하여 앱 버전에 대한 가독화 또는 기호화 파일을 업로드합니다.
Google Play Developer API를 사용하여 파일 업로드

Google Play Developer API를 사용하여 파일을 업로드하려면 Google Developers 사이트로 이동하세요.

3단계: 가독화된 비정상 종료 스택 트레이스 보기

앱 버전에 대한 ProGuard 매핑 파일 또는 디버그 기호 파일을 업로드하면 이후에 발생하는 비정상 종료 및 ANR이 가독화됩니다. 앱의 비정상 종료 및 ANR 페이지에서 각 비정상 종료 및 ANR에 대한 가독화된 스택 트레이스를 검토할 수 있습니다.

  1. Play Console을 엽니다.
  2. 앱을 선택합니다.
  3. 왼쪽 메뉴에서 품질 > Android vitals > 비정상 종료 및 ANR을 선택합니다.
  4. 특정 비정상 종료를 선택합니다.
  5. '스택 트레이스' 섹션에 가독화 및 기호화된 스택 트레이스가 표시됩니다.

중요: 앱의 버전에 대한 매핑 파일을 업로드하면 해당 앱 버전과 관련된 이후 비정상 종료 및 ANR만 가독화됩니다. 관련 매핑 파일을 업로드하기 전에 발생하는 특정 앱 버전의 비정상 종료 및 ANR은 가독화되지 않습니다.

자주 묻는 질문(FAQ)

Play Console 가독화/기호화를 사용하고 싶지 않습니다. 오프라인으로 기호화할 수 있나요?

Play Console은 ndk-stack을 사용하여 네이티브 앱의 스택 트레이스를 기호화하고 자바 비정상 종료의 경우 ReTrace를 사용합니다. 가독화 파일을 공유하지 않도록 선택하면 Play Console에서 난독화된 비정상 종료 스택을 복사하고 오프라인에서 적절한 도구를 사용하여 기호화할 수 있습니다. 하지만 이 프로세스는 각 비정상 종료 스택에 대해 수동으로 실행되어야 하므로 속도가 느리고 시간이 오래 걸립니다. 가독화 파일을 제공하면 Play Console에서 자동으로 처리됩니다.

가독화/기호화 파일을 업로드했는데도 비정상 종료 및 ANR이 여전히 난독화되어 있는 이유는 무엇인가요?

앱 버전에 대한 ProGuard 매핑 파일 또는 디버그 기호 파일을 업로드하면 이후에 발생하는 비정상 종료 및 ANR만 가독화됩니다. 사용자의 기기에서 새로운 비정상 종료 및 ANR이 보고되어야 Play Console에 가독화된 비정상 종료 및 ANR이 표시됩니다.

가독화/기호화 파일을 업로드한 후 비정상 종료 및 ANR이 부분적으로 가독화되는 이유는 무엇인가요?

이는 불완전한 가독화/기호화 파일을 업로드했기 때문입니다. 특히 복잡하거나 여러 단계를 거치는 빌드 프로세스를 사용하는 경우 전체 앱에 대한 기호화 파일을 포함해야 합니다. 부분 가독화의 가장 일반적인 이유 중 하나는 타사 라이브러리 사용입니다. 이 경우 라이브러리 제공업체에서 가독화 파일을 가져올 수 있습니다.

가독화/기호화 파일을 업로드 한 후 비정상 종료 및 ANR이 더 적게, 하지만 더 심각하게 나타나는 이유는 무엇인가요?

가독화 파일이 없으면 32비트 및 64비트 기기 또는 ARM 및 Intel 기기에서 동일한 비정상 종료 또는 ANR이 별도로 표시됩니다. 가독화 파일을 제공하면 이러한 비정상 종료가 함께 클러스터링되어 가장 영향이 큰 비정상 종료 및 ANR을 파악할 수 있습니다.

파일 업로드하는 걸 잊으면 어떻게 되나요?

앱의 새 버전에 대한 파일을 업로드하지 않으면 비정상 종료 및 ANR이 다시 난독화됩니다. 위의 안내에 따라 지금 바로 업로드하세요. 앱 버전에 대한 ProGuard 매핑 파일 또는 디버그 기호 파일을 업로드하면 이후에 발생하는 비정상 종료 및 ANR만 가독화됩니다. 사용자의 기기에서 새로운 비정상 종료 및 ANR이 보고되어야 Play Console에 가독화된 비정상 종료 및 ANR이 표시됩니다.

파일 업로드하는 걸 잊지 않으려면 Android Gradle 플러그인 버전 4.1 이상에서 App Bundle을 사용하도록 빌드 프로세스를 변경하는 것이 좋습니다. 이 경우 Android 개발자 사이트의 안내에 따라 App Bundle에 디버그 기호 파일을 자동으로 포함할 수 있습니다.

잘못된 파일을 업로드하면 어떻게 되나요?

앱 버전에 잘못된 파일을 업로드하면 비정상 종료 및 ANR이 다시 난독화됩니다. 올바른 버전을 업로드하려면 다음 단계를 따르세요.

  1. Play Console을 엽니다.
  2. 앱을 선택합니다.
  3. 왼쪽 메뉴에서 출시 > App Bundle 탐색기를 선택합니다.
  4. 오른쪽 상단의 선택도구를 사용하여 관련 아티팩트를 선택합니다.
  5. 다운로드 탭을 선택하고 '애셋' 섹션까지 아래로 스크롤합니다.
  6. 잘못된 가독화 또는 기호화 파일 옆의 삭제 아이콘을 클릭합니다.
  7. 잘못된 버전이 삭제되면 업로드 아이콘을 클릭하고 앱 버전에 대한 올바른 파일을 업로드합니다.

앱 버전에 대한 ProGuard 매핑 파일 또는 디버그 기호 파일을 업로드하면 이후에 발생하는 비정상 종료 및 ANR만 가독화됩니다. 사용자의 기기에서 새로운 비정상 종료 및 ANR이 보고되어야 Play Console에 가독화된 비정상 종료 및 ANR이 표시됩니다.

도움말: 잘못된 버전의 파일을 업로드하지 않으려면 Android Gradle 플러그인 버전 4.1 이상에서 App Bundle을 사용하도록 빌드 프로세스를 변경하는 것이 좋습니다. 이 경우 Android 개발자 사이트의 안내에 따라 App Bundle에 디버그 기호 파일을 자동으로 포함할 수 있습니다.

현재 APK를 사용 중입니다. App Bundle을 사용하도록 전환하려면 어떻게 해야 하나요?

시작하려면 Android 개발자 사이트를 방문하세요.

앱에 네이티브 코드와 자바 코드가 모두 포함되어 있습니다. 네이티브 기호화 파일과 자바 가독화 파일을 모두 업로드 할 수 있나요?

예.

일부 ANR이 스택 트레이스를 표시하지 않는 이유가 무엇인가요?

시스템에서 ANR이 발생했지만 스택 트레이스를 수집할 수 없는 경우가 있습니다. 이 경우 ANR이 표시되어 앱 안정성을 더 자세히 확인할 수 있지만 스택 트레이스 자체는 표시할 수 없습니다. 스택 트레이스가 없는 ANR은 유형 및 활동별로 그룹화되므로 비슷한 ANR을 검토하고 해결하면 스택 트레이스가 없는 ANR 횟수를 줄이는 데 도움이 될 수 있습니다.

도움이 되었나요?
어떻게 하면 개선할 수 있을까요?

도움이 더 필요하신가요?

로그인하여 추가 지원 옵션으로 문제를 빠르게 해결하세요.

검색
검색어 지우기
검색 닫기
Google 앱
기본 메뉴
도움말 센터 검색
true
92637
false