Android vitals를 사용하여 앱의 성능, 안정성, 크기 개선하기
성능과 안정성은 Google Play의 긍정적인 평가와 직결됩니다. 문제를 해결하고 잘못된 동작을 방지하면 사용자 환경을 개선하고, 평점을 높이며, 설치 후 제거하지 않은 사용자의 수를 늘릴 수 있습니다. 또한 앱 크기를 줄이면 설치율을 높이고 제거 수를 줄일 수 있습니다.
Android vitals를 사용해야 하는 이유
Android vitals는 안정성, 전원, 버벅거림, 시작 시간, 권한 거부 등 앱 성능과 관련된 측정항목을 표시합니다. 이러한 측정항목을 추적하면 사용자 환경에 직접 영향을 미치는 잘못된 앱 동작을 파악하고 해결할 수 있습니다. 또한 핵심 vitals가 갑자기 변경되어 조사가 필요한 비정상 이벤트와 벤치마크가 표시되기 때문에 앱의 성능을 비슷한 앱이나 선택한 앱과 비교할 수 있습니다. 측정항목 값이 높은 앱은 프로모션에 적합하기 때문에 Google Play 스토어 검색에서의 순위도 높아집니다. 또한 Google Play의 신규 및 업데이트 컬렉션, 에디터 추천 컬렉션에 포함되거나 Google Play 어워즈 후보작으로 지명될 가능성이 높습니다.
주요 측정항목
- 안정성 | ANR 발생률: 일일 세션 동안 애플리케이션 응답 없음(ANR)을 1회 이상 경험한 사용자의 비율입니다. 일반적으로 ANR은 UI 스레드 및 백그라운드 프로세스(broadcast receiver)가 교착 상태이거나 느려지는 경우 발생합니다.
- 안정성 | 비정상 종료 발생률: 일일 세션 동안 비정상 종료를 1회 이상 경험한 사용자의 비율입니다. 비정상 종료는 예외가 제대로 처리되지 않거나, 리소스가 고갈되거나, 어설션에 실패하거나, 그 밖의 예기치 못한 상태로 인해 발생하는 경우가 많습니다.
- 렌더링 시간 | 16ms(60fps): 렌더링 시간이 16ms를 초과한 프레임이 50% 이상인 일일 세션의 비율에 관한 정보가 표시됩니다. 앱과 사용자의 상호작용은 초당 60프레임으로 실행되어야 하며, 프레임 누락이나 지연이 발생하지 않아야 합니다.
- 렌더링 시간 | 700ms: 하루 동안 렌더링 시간이 700ms를 초과한 프레임이 0.1% 이상인 현상을 경험한 사용자의 비율입니다. 위에서 설명한 바와 같이 렌더링 시간이 길어지면 앱이 매끄럽게 작동하지 않게 되므로 사용자 경험에 부정적인 영향을 미칩니다. 렌더링하는 데 700ms 이상 걸리는 프레임이 있는 경우 앱이 멈춘 것처럼 보일 수 있습니다.
- 배터리 | 부분적인 wake lock: 하루 동안 1시간을 초과하는 wake lock을 1회 이상 경험한 사용자의 비율입니다. 부분적인 장기 wake lock은 유휴 상태에 있는 기기가 절전 모드로 들어가거나 배터리를 절약하지 못하게 방해합니다.
- 배터리 | Wakeup: 기기가 완전히 충전된 이후 시간당 60회 이상의 wakeup을 경험한 사용자의 비율입니다. 앱이 사용되지 않을 때 시간 기반의 작업을 수행하는 알람으로 인해 wakeup이 빈번하게 발생하게 되면 유휴 상태의 기기가 절전 모드로 들어가지 못합니다.
- 시작 시간: 사용자가 콜드, 웜, 핫 시작 시간 지연을 경험한 세션 비율입니다. 시작 시간 지연은 다양한 문제로 인해 야기될 수 있지만 일반적으로 앱을 초기화할 때 작업 부하가 과중하거나 복잡한 로직을 실행하는 경우에 발생합니다.
- 권한 거부: 사용자가 권한을 거부하거나 다시 묻지 않음을 선택한 일일 권한 세션의 비율입니다. 권한 거부는 사용자가 권한 요청의 이유를 분명히 알지 못하거나 요청이 불필요하거나 불합리하다고 생각하고 있음을 나타낼 수도 있습니다.
- 앱 크기: 앱의 다운로드 크기 및 기기 내에서 차지하는 크기를 추적하여 이러한 측정항목을 유사한 앱과 비교합니다. 또한 저장용량이 적은 기기의 활성 사용자와 제거 측정항목을 확인하세요. 출시한 앱의 분석 결과를 바탕으로 앱 크기를 줄이는 방법에 관한 최적화된 추천을 받으세요.
권장사항
- 비정상적인 동작에 관해 생각해 보고, 이러한 동작을 없앱니다. 앱 개발 시 앱이 다양한 환경에서 어떻게 작동할지 생각해 보세요. 예를 들어 모든 기능을 갖춘 고급형 기기에서 앱을 테스트하고 있다면 전력, 메모리, 대역폭, CPU/GPI 성능이 제한적인 저가형 기기에서는 앱이 어떻게 작동할지 생각해 보세요. 사전 출시 보고서를 사용하여 출시하기 전에 더 광범위한 기기에서 앱을 테스트해 보세요.
- 새로운 앱 버전을 출시한 후 Android vitals를 확인합니다. 새로운 앱을 게시하고 나면 Android vitals를 통해 앱이 실제로 프로덕션 기기에서 어떤 성능을 보여주는지 알려주는 측정항목이 제공됩니다. 이를 통해 특정 기기 및 Android 버전을 사용하는 사용자에게 영향을 미치는 문제와 비정상적인 동작에는 어떤 것이 있는지 파악할 수 있습니다.
- 문제가 발생하는 기기를 파악합니다. 앱이 특정 기기에서만 비정상적인 동작을 보일 수도 있고, 여러 기기에서 보일 수도 있습니다. 사용자 환경에 미치는 영향 및 영향을 받는 기기/사용자 수에 따라 해결책이 제공될 때까지 앱의 기기 타겟팅을 업데이트하여 이러한 기기를 배제할 수 있습니다.
-
문제가 있는 Android 버전을 식별합니다. 앱이 특정 Android 버전에서만 비정상적인 동작을 보일 수도 있습니다. 소수의 사용자만 사용하는 구형 Android 버전의 경우 앱을 업데이트하여 비정상적인 동작을 제거하거나 앱의 매니페스트에 있는
<uses-sdk>
요소의android:minSdkVersion
속성을 업데이트하여 앱이 비정상적인 동작을 보이지 않는 API 수준으로 설정할 수도 있습니다. 새로운 Android 버전의 경우 새로운 Android 버전을 제외하도록<uses-sdk>
요소의android:maxSdkVersion
속성을 설정하는 대신 항상 앱을 업데이트하여 비정상적인 동작을 수정하시기 바랍니다 - 오류 보고 도구를 사용하여 비정상 종료 및 ANR을 식별하고 추적합니다. 오류 보고 도구(예: Firebase 오류 보고 또는 Crashlytics)와 Android 스튜디오 디버깅을 사용하여 비정상 종료 및 ANR로 이어지는 시나리오를 최대한 많이 식별하고 추적합니다.
- JobScheduling API를 사용하여 wake lock 및 wakeup을 방지합니다. JobScheduler와 같은 JobScheduling API를 사용하여 백그라운드 프로세스 및 작업을 효율적으로 예약합니다. 이렇게 하면 플랫폼에서 유휴 상태를 더욱 효과적으로 관리하여 배터리 수명을 절약할 수 있습니다.
- FrameMetrics API를 사용하여 느린 렌더링 시간을 파악합니다. FrameMetrics를 사용하여 프로덕션 단계에 있는 기기의 상호작용별 프레임 렌더링 시간을 매우 세분화하여 측정합니다. 이를 통해 USB를 통해 연결된 테스트 기기에 의존하지 않고도 프로덕션 기기에서 버벅거림을 유발하는 특정 상호작용이나 이벤트를 식별할 수 있습니다.
- 권한 요청 관련 권장사항을 준수합니다. 권한을 요청하기 전에 사용자에게 안내를 제공하고 권한을 허용하면 즉시 혜택을 받을 수 있도록 하세요. 사용자가 권한 거부를 취소하도록 도와주고 앱이 작동할 수 있도록 올바르게 설정했는지도 확인합니다.
- 사전 출시 보고서를 사용하여 실제 기기에서 앱을 테스트하고 업데이트를 게시하기 전에 문제를 파악 및 수정합니다.
- Android App Bundle을 사용하도록 전환하여 코드를 리팩터링하지 않고 앱 크기를 줄일 수 있는 앱을 빌드 및 출시하는 효율적인 방법을 활용하세요.