앱 성능 프로파일링

반응이 느리거나 애니메이션이 끊기거나 작동을 멈추거나 전력을 많이 소모하면 앱 성능이 낮은 것으로 간주됩니다. 성능 문제를 해결할 때는 앱에서 CPU, 메모리, 그래픽, 네트워크, 기기 배터리와 같은 리소스를 비효율적으로 사용하는 영역을 확인하는 작업이 진행됩니다.

이러한 문제를 찾아서 해결하려면 이 주제에 설명된 프로파일링 및 벤치마킹 도구와 기법을 사용하세요. 성능 측정 기법을 알아보고 이러한 기법을 사용하여 특정 문제를 해결하는 방법의 예시를 보려면 성능 측정을 참고하세요.

Android 스튜디오에서는 잠재적 문제를 찾고 시각화하는 데 유용한 다음과 같은 몇 가지 프로파일링 도구를 제공합니다.

  • CPU 프로파일러는 런타임 성능 문제를 추적하는 데 도움이 됩니다.
  • 메모리 프로파일러는 메모리 할당을 추적하는 데 도움이 됩니다.
  • 에너지 프로파일러는 배터리 소모에 영향을 미치는 에너지 사용을 추적합니다.

이 도구는 Android 5.0(API 수준 21) 및 이후 버전과 호환됩니다. 도구에 관한 자세한 내용은 사용자 가이드의 이 섹션에 있는 다른 페이지를 참고하세요.

Jetpack Benchmark 라이브러리를 사용하여 애플리케이션에서 다양하고 중요한 작업을 측정할 수 있습니다.

  • Macrobenchmark: UI 애니메이션 또는 스크롤 같은 동작에 의해 트리거되는 애플리케이션 시작 및 다시 그리기를 포함해 중요한 성능 사용 사례를 측정합니다.
  • Microbenchmark: 특정 함수의 CPU 비용을 측정합니다.

이러한 라이브러리에 관해 자세히 알아보려면 앱 벤치마크 페이지를 참고하세요.

프로파일링 가능한 애플리케이션

Profileable은 Android Q에서 도입된 매니페스트 구성입니다. Profileable은 기기 사용자가 Android 스튜디오, Simpleperf, Perfetto와 같은 도구를 통해 이 애플리케이션을 프로파일링할 수 있는지 여부를 지정합니다.

profileable이 도입되기 전에는 대부분의 개발자가 Android에서만 디버그 가능한 앱을 프로파일링할 수 있었기 때문에 막대한 성능 비용이 추가되었습니다. 이러한 성능 비용은 프로파일링의 결과를 무효화할 수 있는데, 결과가 타이밍과 관련된 것일 경우 특히 그렇습니다. 표 1에는 디버그 가능한 앱과 프로파일링 가능한 앱의 차이점이 나와 있습니다.

표 1. 디버그 가능한 앱과 프로파일링 가능한 앱의 주요 차이점 요약
기능 디버그 가능 프로파일링 가능
메모리 프로파일러 전체

예:

아니요:

CPU 프로파일러 전체

예:

아니요:

네트워크 프로파일러 아니요
에너지 프로파일러 아니요
전원 프로파일러
이벤트 모니터 아니요

Profileable은 개발자가 앱이 아주 적은 성능 비용으로 프로파일링 도구에 정보를 노출하는 것을 허용할 수 있도록 도입되었습니다. 프로파일링 가능한 APK는 매니페스트 파일의 <application> 섹션 내 <profileable android:shell="true"/> 라인에 추가된 출시 APK입니다.

프로파일링 가능한 앱 자동으로 빌드 및 실행

클릭 한 번으로 프로파일링 가능한 앱을 구성, 빌드, 실행할 수 있습니다. 이 기능을 사용하려면 API 수준 29 이상을 실행하고 Google Play가 설치된 가상 또는 실제 테스트 기기가 필요합니다. 이 기능을 사용하려면 프로필 앱 아이콘 옆의 화살표를 클릭하고 다음 두 옵션 중 하나를 선택하세요.

클릭 한 번으로 프로파일링 가능한 빌드 메뉴
  • Profile 'app' with low overhead는 CPU 프로파일러와 메모리 프로파일러를 시작합니다. 메모리 프로파일러에서는 Record Native Allocations만 사용 설정됩니다.

    낮은 오버헤드로 프로파일링
  • Profile 'app' with complete data를 선택하면 CPU, 메모리, 에너지 프로파일러가 시작됩니다.

    완전한 데이터로 프로파일링

프로파일링 가능한 앱 직접 빌드 및 실행

프로파일링 가능한 애플리케이션을 직접 빌드하려면 먼저 출시 애플리케이션을 빌드한 다음 매니페스트 파일을 업데이트해야 합니다. 그러면 출시 애플리케이션이 프로파일링 가능한 애플리케이션으로 변환됩니다. 프로파일링 가능한 애플리케이션을 구성한 후에는 프로파일러를 실행하고 분석할 프로파일링 가능 프로세스를 선택합니다.

출시 앱 빌드하기

프로파일링 목적으로 출시 애플리케이션을 빌드하려면 다음 단계를 따르세요.

  1. 애플리케이션의 build.gradle 파일에 다음 라인을 추가하여 애플리케이션을 디버그 키로 서명합니다. 작동하는 출시 빌드 변형이 있다면 다음 단계로 건너뛰어도 됩니다.

            buildTypes {
              release {
                signingConfig signingConfigs.debug
              }
            }
          
  2. Android 스튜디오에서 Build > Select Build Variant...를 선택하고 출시 변형을 선택합니다.

출시를 프로파일링 가능으로 변경하기

  1. 위의 AndroidManifest.xml 파일을 만들고 <application>입니다. 자세한 내용은 출시를 위한 애플리케이션 빌드를 참고하세요.

    <profileable android:shell="true"/>

  2. SDK 버전에 따라 애플리케이션의 build.gradle 파일에 다음 라인을 추가해야 할 수 있습니다.

          aaptOptions {
            additionalParameters =["--warn-manifest-validation"]
          }
        

프로파일링 가능한 앱 프로파일링하기

프로파일링 가능한 앱을 프로파일링하려면 다음 단계를 따르세요.

  1. 개발 에뮬레이터 또는 기기에서 앱을 시작합니다.

  2. Android 스튜디오에서 View > Tool Windows > Profiler를 선택하여 프로파일러를 실행합니다.

  3. 애플리케이션이 실행되면 프로파일러에서 프로파일러 더하기 버튼 버튼을 클릭하여 드롭다운 메뉴를 표시합니다. 기기를 선택한 다음 Other profileable processes 아래에서 애플리케이션 항목을 선택합니다.

    Profileable 메뉴
  4. 프로파일러가 애플리케이션에 연결됩니다. CPU 프로파일러와 메모리 프로파일러만 사용할 수 있으며, 메모리 프로파일러는 제한된 기능을 제공합니다.

    Profileable 세션 뷰
    Profileable 메뉴
    Profileable 메뉴

세션

프로파일러 데이터를 세션으로 저장할 수 있으며, 세션은 Android 스튜디오를 종료할 때까지 유지됩니다. 프로파일링 정보를 여러 세션에 기록하고 세션 간을 전환하여 다양한 시나리오의 리소스 사용량을 비교할 수 있습니다.

  • 새로운 세션을 시작하려면 Start a new profiling session 버튼을 클릭하고 표시되는 드롭다운 메뉴에서 앱 프로세스를 선택합니다.
  • 트레이스를 기록하거나 힙 덤프를 캡처하면 Android 스튜디오에서 해당 데이터를 앱의 네트워크 활동과 함께 현재 세션에 별도의 항목으로 추가합니다.
  • 현재 세션에 더 이상 데이터를 추가하지 않으려면 Stop the current profiling session 을 클릭하세요.
  • 이전의 Android 스튜디오 실행에서 내보낸 트레이스를 가져오려면 Start new profiler session 을 클릭하고 Load from file을 선택합니다.

이전 기기 추가 지원 사용 설정(API 수준 < 26)

Android 7.1 및 이전 버전을 사용하는 기기를 실행할 때 추가 프로파일링 데이터를 표시하려면 Android 스튜디오에서 컴파일된 앱에 모니터링 로직을 삽입해야 합니다. 그러한 추가 프로파일링 데이터는 다음과 같습니다.

  • 모든 프로파일러 창의 이벤트 타임라인
  • 메모리 프로파일러의 할당된 객체 수
  • 메모리 프로파일러의 가비지 컬렉션 이벤트
  • 네트워크 프로파일러의 전송된 모든 파일에 관한 세부정보

이전 기기 추가 지원을 사용 설정하려면 다음 단계를 따르세요.

  1. Run > Edit Configurations를 선택합니다.
  2. 왼쪽 창에서 앱 모듈을 선택합니다.
  3. Profiling 탭을 클릭한 다음 Enable additional support for older devices (API level < 26)를 선택합니다.
  4. 앱을 빌드하고 다시 실행합니다.

이전 기기 추가 지원을 사용 설정하면 빌드 프로세스가 느려지므로 앱 프로파일링을 시작하고자 할 때만 사용 설정해야 합니다.

독립형 프로파일러 실행

독립형 Android 스튜디오 프로파일러를 사용하면 전체 Android 스튜디오 IDE를 실행하지 않고도 앱을 프로파일링할 수 있습니다.

독립형 프로파일러를 실행하려면 다음 단계를 따르세요.

  1. 프로파일러가 현재 Android 스튜디오 내에서 실행되고 있지 않은지 확인합니다.
  2. 설치 디렉터리로 이동한 후 bin 디렉터리로 이동합니다.

    Windows/Linux: studio-installation-folder/bin

    macOS: 독립형 프로파일러는 macOS에서 지원되지 않습니다.

  3. OS에 따라 profiler.exe 또는 profiler.sh를 실행합니다. Android 스튜디오 스플래시 화면이 표시됩니다. 스플래시 화면이 사라지면 프로파일러 창이 열립니다.