Android NDK
중요
Visual Studio App Center는 2025년 3월 31일에 사용 중지될 예정입니다. Visual Studio App Center가 완전히 사용 중지될 때까지 계속 사용할 수 있지만 마이그레이션을 고려할 수 있는 몇 가지 권장 대안이 있습니다.
Android NDK를 사용하면 C 및 C++를 사용하여 Android 앱의 일부를 구현할 수 있습니다. Android 앱용 Google Breakpad 클라이언트 라이브러리를 사용하여 네이티브 코드에서 유효한 스택 추적을 받을 수 있습니다. 스택 추적에는 메모리 주소만 포함될 수 있습니다. 충돌을 읽고 이해하는 데 필요한 클래스 이름, 메서드, 파일 이름 및 줄 번호는 표시되지 않습니다. Android NDK 앱에 대해 변환된 메모리 주소를 얻으려면 각 빌드에 대한 애플리케이션 기호를 업로드해야 합니다.
NDK 크래시를 보고하는 방법을 알아보려면 Android 앱용 Android SDK 설명서 또는 Unity 앱용 Unity SDK 설명서를 참조하세요.
다른 플랫폼에서 App Center로 중단 패드 크래시를 보내려면 사용자 지정 크래시 업로드 설명서를 참조하세요.
구성되지 않은 크래시
심볼을 업로드하기 전에 몇 가지 세부 정보를 볼 수 있도록 앱 센터 진단 섹션에 심볼이 없는 크래시가 표시됩니다. 이러한 크래시에서 누락된 기호는 "unsymbolicated" 탭에 표시됩니다. 누락된 기호가 업로드되면 심볼화되지 않은 크래시 그룹이 기호화된 크래시 그룹으로 대체됩니다.
참고
App Center는 시스템 라이브러리에서 제공되는 프레임의 기호화를 지원하지 않습니다. 지정된 디바이스/OS 버전 조합에서 다를 수 있는 Android 및 기타 플랫폼에 대한 시스템 이진 파일의 높은 조각화를 감안할 때 App Center는 시스템 이진 파일에 대한 기호 자체를 제공하지 않으며 기호화에서 시스템 이진 파일에서 프레임을 자동으로 건너뜁니다.
업로드할 .zip 파일 생성
App Center에서 기호화에 필요한 기호를 검색하는 방법에는 두 가지가 있습니다. App Center는 프로젝트에 사용되는 네이티브 이진 파일에서 생성하거나 중단 패드 기호를 직접 업로드할 수 있습니다.
옵션 1: 네이티브 이진 파일 업로드
프로젝트 obj/local/$ABI/
디렉터리의 모든 .so 파일을 .zip 파일에 넣습니다.
옵션 2: 중단 패드 기호 업로드
- "디버깅 기호 가져오기" 섹션 아래 의 중단 패드 설명서 에 설명된 대로 중단 패드 도구 체인을 사용하여 기호를 덤프합니다.
- 다음 구조를 사용하여 symbols.zip 파일을 만듭니다.
참고
macOS에서 기호를 업로드하는 경우 불필요한 폴더의 기호를 클린 합니다(예: __MACOS 생성되고 이를 삭제하려면 를 사용할 zip -d <symbols.zip> __MACOSX/\*
수 있습니다.
$ unzip -l symbols.zip
Archive: symbols.zip
Length Date Time Name
-------- ---- ---- ----
0 07-22-13 15:07 symbols/
0 07-22-13 15:07 symbols/libnative.so/
0 07-22-13 15:07 symbols/libnative.so/EAC901FB6DDCCE8AED89E1A8E4A58360/
12468 07-22-13 15:07 symbols/libnative.so/EAC901FB6DDCCE8AED89E1A8E4A58360/libnative.so.sym
0 07-22-13 15:07 symbols/libnative.so/FDC5C9E715C4F16408C0B78F95855BF0/
12467 07-22-13 15:07 symbols/libnative.so/FDC5C9E715C4F16408C0B78F95855BF0/libnative.so.sym
-------- -------
24935 6 files
기호 업로드
참고
App Center 빌드 및 배포 서비스는 기호를 진단 서비스에 자동으로 전달할 수 있습니다. App Center를 사용하여 최종 사용자에게 앱을 빌드하고 자동으로 배포하는 경우 아래 단계에 설명된 대로 기호 파일을 수동으로 가져오고 업로드할 필요가 없습니다.
App Center 포털
- App Center에 로그인하고 앱을 선택합니다.
- 왼쪽 메뉴에서 진단 섹션, 문제로 이동합니다.
- 애플리케이션에서 아직 크래시가 보고되지 않은 경우 API 또는 CLI를 사용하여 중단 패드 기호를 업로드해야 합니다.
- 애플리케이션에서 기호가 필요한 크래시를 이미 보고한 경우 unsymbolicated 탭을 검사 누락된 기호가 있는 버전 그룹이 있어야 하는 경우 해당 항목을 클릭하여 파일을 업로드할 메뉴를 표시합니다.
- App Center에서 기호를 인덱싱하면 크래시가 기호화됩니다.
App Center API
API를 통해 기호를 업로드하는 프로세스에는 일련의 세 가지 API 호출이 포함됩니다. 하나는 백 엔드에 공간을 할당하고, 다른 하나는 파일을 업로드하고, 다른 하나는 업로드의 상태 업데이트합니다. 첫 번째 API 호출의 본문은 로 설정 symbol_type
Breakpad
해야 합니다.
POST
symbol_uploads API에 대한 요청을 트리거합니다. 이 호출은 파일의 백 엔드에 공간을 할당하고 및upload_url
속성을 반환symbol_upload_id
합니다.
curl -X POST 'https://api.appcenter.ms/v0.1/apps/{owner_name}/{app_name}/symbol_uploads' \
-H 'accept: application/json' \
-H 'X-API-Token: {API TOKEN}' \
-H 'Content-Type: application/json' \
-d '{JSON BODY}'
- 첫 번째 단계에서 반환된
upload_url
속성을 사용하여 헤더"x-ms-blob-type: BlockBlob"
를PUT
사용하여 요청을 수행하고 디스크에 파일의 위치를 제공합니다. 이 호출은 백 엔드 스토리지 계정에 파일을 업로드합니다. PUT Blob 요청 헤더 에 대해 자세히 알아봅니다.
curl -X PUT '{upload_url}' \
-H 'x-ms-blob-type: BlockBlob' \
--upload-file '{path to file}'
- 첫 번째 단계에서 반환된
PATCH
속성을 사용하여symbol_upload_id
symbol_uploads API에 요청합니다. 요청 본문에서 업로드의 상태 업로드committed
프로세스를aborted
(성공적으로 완료)로 설정할지 또는 (성공적으로 완료하지 못했는지) 지정합니다.
curl -X PATCH 'https://api.appcenter.ms/v0.1/apps/{owner_name}/{app_name}/symbol_uploads/{symbol_upload_id}' \
-H 'accept: application/json' \
-H 'X-API-Token: {API TOKEN}' \
-H 'Content-Type: application/json' \
-d '{ "status": "committed" }'
참고
기호 업로드 API는 256MB보다 큰 파일에 대해 작동하지 않습니다. App Center CLI를 사용하여 이러한 파일을 업로드합니다. App Center CLI 리포지토리의 지침에 따라 App Center CLI를 설치할 수 있습니다.
App Center CLI
CLI를 사용하여 기호 파일을 업로드할 수도 있습니다.
appcenter crashes upload-symbols --breakpad {symbols file}
기호 무시
App Center에 크래시 보고서를 완전히 심볼화할 기호 파일이 모두 없는 경우 크래시가 동기화되지 않은 탭에 나열됩니다. 필요한 기호는 액세스 권한이 있는 경우 이 페이지에서 업로드됩니다.
기호를 업로드할 수 없는 경우 테이블에서 행을 선택하고 버전 무시 단추를 클릭하여 무시됨으로 표시할 수 있습니다. 이 단추는 App Center에 크래시를 처리하고 파일의 기호를 사용하여 가능한 한 완전히 기호화하도록 지시합니다. 처리가 완료되면 크래시 탭에 부분적으로 기호화된 상태로 표시됩니다. 무시됨으로 표시된 것과 동일한 기호 ID에 의존하는 새로운 크래시가 시스템 내부로 들어오고 흐르는 동안 해제된 탭을 무시합니다.