앱 성능 프로파일링

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

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

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

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

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

이러한 도구에 관한 자세한 내용은 Android 스튜디오 프로파일러 페이지를 참고하세요.

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

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

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

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

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

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

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

예:

아니요:

CPU 프로파일러 전체

예:

아니요:

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

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

프로파일링 가능한 애플리케이션을 빌드하려면 먼저 출시 애플리케이션을 빌드한 다음 매니페스트 파일을 업데이트해야 합니다. 그러면 출시 애플리케이션이 프로파일링 가능한 애플리케이션으로 변환됩니다.

출시 앱 빌드하기

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

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

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

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

  1. AndroidManifest.xml 파일을 열고 다음을 추가하여 출시 애플리케이션을 프로파일링 가능한 애플리케이션으로 변환합니다. 자세한 내용은 출시를 위한 애플리케이션 빌드를 참고하세요.

    <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 메뉴

참고: 앱을 프로파일링할 때 Instant Run을 사용 중지해야 합니다. Instant Run을 사용할 때 약간의 성능 저하가 발생하며, 메서드를 업데이트할 때 조금 더 많은 저하가 발생합니다. 이러한 성능 저하는 성능 프로파일링 도구에서 제공하는 정보에 지장을 줄 수 있습니다. 또한 이 기능을 사용하는 동안 생성되는 스텁 메서드가 스택 트레이스를 복잡하게 만들 수 있습니다.