기본적으로 네이티브 코드 라이브러리는 앱의 출시 빌드에서 제거됩니다. 이 제거는 앱에서 사용하는 네이티브 라이브러리에 포함된 기호 테이블과 디버그 정보를 삭제하는 것으로 구성됩니다. 네이티브 코드 라이브러리를 제거하면 크기가 크게 줄어들지만 정보 (예: 클래스 및 함수 이름)가 누락되어 Google Play Console에서 비정상 종료를 진단할 수 없습니다. 비정상 종료를 디버그하려면 Play Console에서 앱과 함께 디버그 기호 파일을 포함해야 합니다.
기호 파일 업로드
Google Play Console은 Android vitals에서 네이티브 비정상 종료를 보고합니다. 몇 단계만 거치면 앱의 네이티브 디버그 기호 파일을 생성하고 업로드할 수 있습니다. 이 파일로 Android vitals에서 기호화된 네이티브 비정상 종료 스택 트레이스 (클래스 및 함수 이름 포함)를 사용 설정하여 프로덕션에서 앱을 디버그할 수 있습니다. 이러한 단계는 프로젝트에서 사용하는 Android Gradle 플러그인의 버전과 Android App Bundle (권장) 또는 APK를 사용하는지에 따라 다릅니다.
Android Gradle 플러그인 버전 4.1 이상
프로젝트가 Android App Bundle (AAB)을 빌드하는 경우 빌드를 구성하여 AAB에 네이티브 디버그 기호 파일을 자동으로 포함하도록 할 수 있습니다. 그러면 앱을 게시할 때 Play Console에 업로드됩니다. 출시 빌드에 이 파일을 포함하려면 앱의 build.gradle.kts
파일에 다음을 추가합니다.
android.buildTypes.release.ndk.debugSymbolLevel = { SYMBOL_TABLE | FULL }
다음에서 디버그 기호 수준을 선택합니다.
SYMBOL_TABLE
을 사용하여 Play Console의 기호화된 스택 트레이스에서 함수 이름을 가져옵니다. 이 수준은 Tombstone을 지원합니다.FULL
을 사용하여 Play Console의 기호화된 스택 트레이스에서 함수 이름, 파일, 행 번호를 가져옵니다.
프로젝트가 APK를 빌드하는 경우 이전에 보여준 android.buildTypes.release.ndk.debugSymbolLevel
설정을 사용하여 네이티브 디버그 기호 파일을 별도로 생성합니다. Google Play Console에 네이티브 디버그 기호 파일을 수동으로 업로드합니다. 이 프로세스는 스택 트레이스를 가독화하기 위해 매핑 파일을 업로드하는 것과 유사합니다.
빌드 프로세스의 일부로 Android Gradle 플러그인은 다음 프로젝트 위치에 이 파일을 출력합니다.
app/build/outputs/native-debug-symbols/<var>variant-name</var>/native-debug-symbols.zip
Android Gradle 플러그인 버전 4.0 이하(및 기타 빌드 시스템)
빌드 프로세스의 일부로 Android Gradle 플러그인은 제거되지 않은 라이브러리의 사본을 프로젝트 디렉터리에 유지합니다. 이 디렉터리 구조는 다음과 유사합니다.
app/build/intermediates/cmake/universal/release/obj/
├── armeabi-v7a/
│ ├── libgameengine.so
│ ├── libothercode.so
│ └── libvideocodec.so
├── arm64-v8a/
│ ├── libgameengine.so
│ ├── libothercode.so
│ └── libvideocodec.so
├── x86/
│ ├── libgameengine.so
│ ├── libothercode.so
│ └── libvideocodec.so
└── x86_64/
├── libgameengine.so
├── libothercode.so
└── libvideocodec.so
다음 디렉터리의 콘텐츠를 압축합니다.
cd app/build/intermediates/cmake/universal/release/obj zip -r symbols.zip .
Google Play Console에 수동으로
symbols.zip
파일을 업로드합니다.