Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

앱을 계측하여 트레이스 로그 생성

앱 실행의 메서드 트레이스를 생성하려면 Debug 클래스를 사용하여 앱을 계측할 수 있습니다. 이 방법으로 앱을 계측하면 기기에서 추적 정보 기록을 시작하고 중지하는 시점을 더 정확하게 관리할 수 있습니다. 기기에서는 또한 사용자가 지정한 이름을 사용하여 트레이스 로그를 저장하므로 나중에 각 로그를 쉽게 식별할 수 있습니다. 그런 다음 Android 스튜디오 CPU 프로파일러를 사용하여 각 트레이스 로그를 볼 수 있습니다.

앱의 코드를 계측하지 않고 CPU 프로파일러에서 추적을 시작하고 중지할 수도 있습니다.

트레이스 로그를 생성하기 전에 앱에 외부 저장소(WRITE_EXTERNAL_STORAGE)에 기록할 수 있는 권한이 있어 트레이스 로그를 기기에 저장할 수 있는지 확인하세요.

앱 계측

트레이스 로그를 생성하려면 시스템에서 추적 데이터 로깅을 시작할 위치에서 startMethodTracing()을 호출하세요.

호출 시 .trace 파일의 이름을 지정할 수 있으며 시스템은 타겟 기기의 영구 앱 데이터를 위한 패키지별 디렉터리에 파일을 저장합니다. 이 디렉터리는 getExternalFilesDir()에서 반환하는 것과 동일한 디렉터리이며 대부분의 기기에서 ~/sdcard/ 디렉터리에 있습니다. 이 파일에는 바이너리 메서드 트레이스 데이터와 매핑 테이블이 스레드 및 메서드 이름과 함께 포함됩니다. 추적을 중지하려면 stopMethodTracing()을 호출하세요.

다음 샘플에서는 sample.trace라는 이름의 트레이스 로그 기록을 시작하고 중지합니다.

Kotlin

    // Starts recording a trace log with the name you provide. For example, the
    // following code tells the system to start recording a .trace file to the
    // device with the name "sample.trace".
    Debug.startMethodTracing("sample")

    // The system begins buffering the generated trace data, until your
    // application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes
    // the buffered data to the output file.
    Debug.stopMethodTracing()

    

자바

    // Starts recording a trace log with the name you provide. For example, the
    // following code tells the system to start recording a .trace file to the
    // device with the name "sample.trace".
    Debug.startMethodTracing("sample");
    ...
    // The system begins buffering the generated trace data, until your
    // application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes
    // the buffered data to the output file.
    Debug.stopMethodTracing();

    

앱에서 트레이스 로그의 이름을 변경하지 않고 startMethodTracing()을 다시 호출하면 기기에 저장된 기존 로그를 덮어씁니다. 각 트레이스 로그의 이름을 동적으로 변경하는 방법을 알아보려면 여러 로그 저장에 관한 섹션을 참조하세요.

stopMethodTracing()을 호출하기 전에 시스템이 최대 버퍼 크기에 도달하면 추적을 중지하고 콘솔에 알림을 보냅니다. 추적을 시작하고 중지하는 메서드는 앱 프로세스 전체에서 작동합니다. 즉, 활동의 onCreate(Bundle) 메서드에서 startMethodTracing()을 호출하고 이 활동의 onDestroy() 메서드에서 stopMethodTracing()을 호출할 수 있습니다.

프로파일링이 사용 설정된 경우 앱이 더 느리게 실행됩니다. 즉, 절대 타이밍(예: 'foo() 메서드를 실행하는 데 2.5초가 걸림')을 판단하기 위해 프로파일링 데이터를 사용해서는 안 됩니다. 트레이스 로그의 타이밍 정보는 이전 트레이스 로그와 비교하는 경우에만 유용하므로 최근 변경으로 인해 앱이 더 빨라졌는지 또는 느려졌는지 확인할 수 있습니다.

Android 5.0(API 수준 21) 이상을 실행하는 기기에 배포하는 경우 샘플 기반 프로파일링을 사용하여 런타임 성능에 미치는 영향을 최소화하면서 프로파일링할 수 있습니다. 샘플 프로파일링을 사용 설정하려면 startMethodTracing()를 호출하는 대신 지정된 샘플링 간격으로 startMethodTracingSampling()을 호출합니다. 시스템은 앱이 stopMethodTracing()을 호출할 때까지 주기적으로 샘플을 수집합니다.

여러 로그 저장

앱에서 트레이스 로그에 새 이름을 지정하지 않고 메서드 트레이스를 여러 번 시작하고 중지하는 경우 기기에서 이전 트레이스 로그를 새 트레이스 로그로 덮어씁니다. 즉, 가장 최근의 트레이스 로그만 유지됩니다. 여러 트레이스 로그를 기기에 저장하려면 앱에서 startMethodTracing()을 호출할 때마다 동적으로 트레이스 로그의 이름을 변경하세요. 아래 샘플에서는 SimpleDateFormat 클래스를 사용하여 각 트레이스 로그의 이름을 지정할 때 현재 날짜와 시간을 포함합니다.

Kotlin

    // Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with
    // the current date and time.
    val dateFormat: DateFormat = SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault())
    val logDate: String = dateFormat.format(Date())
    // Applies the date and time to the name of the trace log.
    Debug.startMethodTracing("sample-$logDate")

    

자바

    // Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with
    // the current date and time.
    SimpleDateFormat dateFormat =
            new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault());
    String logDate = dateFormat.format(new Date());
    // Applies the date and time to the name of the trace log.
    Debug.startMethodTracing(
            "sample-" + logDate);

    

기기의 트레이스 로그 액세스

시스템에서 기기에 트레이스 로그를 생성한 후 다음 중 한 가지 방법으로 파일에 액세스할 수 있습니다.

  • Device File Explorer를 사용합니다. Device File Explorer를 열려면 View > Tool Windows > Device File Explorer를 클릭하세요(또는 도구 창 모음에서 Device File Explorer 버튼을 클릭하세요). 그림 1과 같이 앱의 패키지별 디렉터리로 이동하여 .trace 파일을 찾을 수 있습니다.

    그림 1. Device File Explorer를 사용하여 트레이스 로그 찾기

  • adb pull 명령어를 사용하여 파일을 로컬 시스템에 복사합니다. 아래 명령어는 sample.trace라는 트레이스 로그를 기기에서 로컬 시스템의 ~/Documents/trace-logs/ 디렉터리에 복사합니다.

        adb pull path-on-device/sample.trace ~/Documents/trace-logs/

그런 다음 CPU 프로파일러를 사용하여 트레이스 파일을 가져올 수 있습니다.