Version: Unity 6.0 (6000.0)
언어 : 한국어
Android 기기에서의 디버깅
Android 기기 시뮬레이션

Android 심볼

Unity는 네이티브 Unity 라이브러리에 대한 디버그 메타데이터를 담은 심볼 파일이 포함된 패키지를 생성하여 애플리케이션 디버깅을 지원합니다. 심볼 파일에는 활성 메모리 주소를 메서드 이름과 같이 사용할 수 있는 정보로 변환하는 심볼 테이블(.symtab)이라는 실행 파일 섹션이 있습니다. 이러한 변환 프로세스를 심볼화라고 합니다. 또한 Google Play 콘솔에 심볼 패키지를 업로드하여 Android Vitals 대시보드에서 사람이 읽을 수 있는 형태의 스택 추적을 확인할 수도 있습니다.

실행 파일(ELF) 섹션에 대한 상세 내용은 Wikipedia를 참조하십시오.

Unity는 다음 라이브러리에 대해 심볼 파일을 생성할 수 있습니다.

  • libmain: 로직을 로드하는 초기 Unity 엔진을 담당합니다. 심볼 파일이 미리 컴파일되었습니다.

  • libunity: Unity의 엔진 코드:

    • Strip Engine Code 프로퍼티가 비활성화되면 심볼 파일이 미리 컴파일됩니다.
    • Strip Engine Code 프로퍼티가 활성화되면 Unity는 빌드 프로세스 동안 심볼 파일을 컴파일합니다.
  • libil2cpp: C# 스크립트 포함:

    • 프로젝트를 익스포트하지 않으면 Unity는 빌드 프로세스 동안 심볼 파일을 컴파일합니다.
    • 프로젝트를 익스포트하면 Gradl이 심볼 파일을 컴파일합니다.

Gradle이 남은 심볼 파일을 생성합니다.

애플리케이션 빌드 포맷에 따라 Unity는 다음 두 가지 방법으로 심볼 파일을 생성합니다.

  • apk 또는 aab 모두에 대해 생성할 수 있는 zip 파일
  • aab에 기호 파일을 직접 임베드. Unity는 심볼 파일을 apk에 임베드하지 않습니다.

UserBuildSettings.DebugSymbols.format API를 사용하여 심볼 패키지의 포맷을 설정합니다.

심볼 파일 유형

Unity는 Gradle의 debugSymbolLevel 프로퍼티를 사용하여 심볼 파일을 생성합니다. 다음과 같이 두 종류의 심볼 파일이 있습니다.

  • 공용: 심볼 표 섹션이 포함된 작은 파일입니다. 자세한 내용은 공용 심볼을 참조하십시오.
  • 디버깅: 공용 심볼 파일에 들어 있는 모든 내용을 포함하고 있으며 더욱 심층적인 디버깅에 사용할 수 있는 전체 디버깅 정보를 포함하고 있습니다. 자세한 내용은 심볼 디버깅을 참조하십시오.

필요한 유형의 심볼 파일을 생성하려면 UserBuildSettings.DebugSymbols.level을 사용하십시오.

참고: 기본적으로 Gradle은 .so.sym 또는 .so.dbg 확장자를 사용하여 기호 파일을 생성합니다. 일부 디지털 배포 서비스는 이러한 확장자를 인식하지 않으며 확장자가 .so인 파일을 요구합니다. 이러한 경우 Unity.Android.Types.DebugSymbolFormat.LegacyExtensions API를 사용하여 .so 확장자가 있는 기호 파일을 생성합니다.

UserBuildSettings.DebugSymbols.format = DebugSymbolFormat.IncludeInBundle | DebugSymbolFormat.Zip | DebugSymbolFormat.LegacyExtensions;

공용 심볼

공개 심볼 파일에는 함수 주소를 사람이 읽을 수 있는 문자열로 변환하는 정보가 포함되어 있습니다. 이러한 파일에는 디버깅 정보가 없습니다. 이렇게 하면 공용 심볼 파일이 디버깅 심볼 파일보다 작아집니다.

디버깅 심볼

심볼 디버깅 파일에는 모든 디버깅 정보와 심볼 표가 포함되어 있습니다. 이를 사용하여 다음을 수행할 수 있습니다.

  • 스택 추적을 해결하고 소스 코드를 사용할 수 있는 애플리케이션을 디버그할 수 있습니다.
  • 애플리케이션에 네이티브 디버거를 연결하여 코드를 디버그할 수 있습니다.

참고: 디버깅 심볼을 사용할 수 없는 경우 Unity는 빌드 시점에 프로젝트에 공용 심볼 파일을 저장합니다. libmainlibunity 라이브러리에 대해서는 디버깅 심볼을 사용할 수 없으며 Unity는 항상 공용 파일을 생성합니다.

커스텀 심볼

추가 심볼 파일을 포함하도록 Unity에 지시할 수 있습니다. 공유되는 라이브러리를 사용하는 경우 애플리케이션이 충돌할 때 로컬 디버거와 Google Play가 공유되는 라이브러리 스택 추적을 해결하려는 경우에 유용합니다.

Unity에 커스텀 심볼 파일을 포함하려면:

  1. 프로젝트 창에서 파일 확장자가 .so인 플러그인을 선택합니다.
  2. 인스펙터에서 Platform settings 섹션을 찾습니다.
  3. CPU를 심볼 파일이 호환되는 CPU 아키텍처로 설정합니다.
  4. Shared Library TypeSymbol로 설정합니다.

Unity는 심볼 패키지를 생성할 때마다 심볼 패키지에 추가 심볼 파일을 추가합니다.

Unity에 C# 스크립트의 커스텀 심볼 파일을 포함하려는 경우 UnityEditor.Android 네임스페이스에는 각각 CPUShared Library Type을 설정하는 다음 API가 포함되어 있습니다.

참고: 심볼 파일 이름은 해당 심볼 파일이 있는 공유 라이브러리의 이름과 일치해야 합니다. 예를 들어 공유 라이브러리의 이름이 mylibrary.so라면 심볼 파일의 이름도 mylibrary.so여야 합니다. 파일 이름 충돌을 방지하려면 심볼 파일과 공유되는 라이브러리가 별도의 디렉터리에 있어야 합니다.

중요: 심볼 파일이 최신 상태이고 실행 코드가 포함된 공유되는 라이브러리와 호환되는지 확인하십시오. 그렇지 않으면 로컬 디버거와 Google Play가 공유되는 라이브러리에 있는 코드의 스택 추적을 확인하지 못합니다.

심볼 패키지 생성

애플리케이션을 위한 심볼 패키지 생성을 활성화하는 데는 두 가지 방법이 있습니다.

빌드 설정 창을 통해 심볼 패키지 생성을 활성화하려면:

  1. Build Profiles 창(메뉴: File > Build Profiles)을 엽니다.

  2. Android 플랫폼을 선택합니다.

  3. 다음 중 한 가지 방법으로 디버그 심볼을 설정합니다.

  4. Symbols output options.zip으로 설정합니다.

심볼 패키지 생성을 활성화한 후 프로젝트를 빌드하면 libmainlibunity 라이브러리용 심볼 파일이 포함된 .zip 파일이 생성됩니다. 스크립팅 백엔드IL2CPP로 설정하면 .zip 파일에 libil2cpp 라이브러리용 심볼 파일도 포함됩니다. Unity는 이 심볼 패키지를 출력 디렉토리 내에 저장합니다.

ndroid 빌드 설정에서 Export Project를 활성화하면 Unity는 프로젝트를 빌드하지 않습니다. 대신 Unity는 Android Studio용 프로젝트를 익스포트하고 libmainlibunity에 대한 심볼을 생성하여 출력 디렉토리의 unityLibrary/symbols/<architecture>/ 내에 배치합니다. Android Studio에서 익스포트된 프로젝트를 빌드할 때 Gradle은 libil2cpp 심볼 파일을 생성하여 이를 libmainlibunity심볼 파일과 함께 unityLibrary/symbols/<architecture>/ 디렉토리 내부에 배치합니다.

Google Play 콘솔에서 심볼 사용

내장된 시스템

Android 앱 번들(aab)을 제작하는 경우, 심볼을 aab에 직접 임베드하여 Google Play에 업로드할 수 있습니다.

참고: Unity는 심볼을 apk에 임베드하지 않습니다. 이 경우 심볼이 포함된 zip 파일을 별도로 업로드해야 합니다.

UserBuildSettings.DebugSymbols.level = DebugSymbolLevel.SymbolTable;
UserBuildSettings.DebugSymbols.format = DebugSymbolFormat.IncludeInBundle;

압축된 심볼

압축된 심볼 패키지를 생성하려면 다음 코드를 사용하십시오.

UserBuildSettings.DebugSymbols.level = DebugSymbolLevel.SymbolTable;
UserBuildSettings.DebugSymbols.format = DebugSymbolFormat.Zip | DebugSymbolFormat.LegacyExtensions;

애플리케이션을 Google Play에 업로드한 후에는 공용 심볼 zip 패키지를 업로드할 수 있습니다. 이를 수행하는 자세한 방법은 Google 기술 자료: 크래시 스택 추적을 가독화 또는 심볼화를 참조하십시오.

참고: Google Play는 심볼 패키지가 업로드되기 전에 애플리케이션이 받은 크래시를 기호화하지 않습니다.

Android 기기에서의 디버깅
Android 기기 시뮬레이션