Android Weekly

Android Weekly #-600 "Baseline Profiles를 이용한 앱 성능 향상"

베블렌 2023. 12. 13. 12:47

12월 2주차에는 한국인 분이 쓰신 글로 Baseline Profiles를 이용한 앱 성능 향상에 관한 글입니다.

 

https://proandroiddev.com/improve-your-android-app-performance-with-baseline-profiles-297f388082e6

 

Improve Your Android App Performance With Baseline Profiles

Application performance holds paramount significance as it directly correlates with the overall user experience. Within the developer…

proandroiddev.com

 

 

 

소개

이 글은 Baseline Profile을 이용하여 코드 실행 속도를 빠르게 하고, 사용자의 첫 실행부터 약 20-30%의 성능 향상을 달성하는 방법을 설명합니다. Baseline Profile은 미리 컴파일된 소스 코드 정보를 제공하여 애플리케이션 실행 시 해석 및 실시간 컴파일 단계를 건너뛰게 합니다.

 

아래 블로그도 잘 정리되어있습니다.

https://bsscco.github.io/posts/2022-06-15-baseline-profiles/

 

Baseline Profiles 정리

Baseline Profiles 한글문서 구글블로그 Baseline Profiles란? APK에 담기는 클래스와 메소드의 목록이다. 앱 설치가 되는 동안 이 목록의 클래스와 메소드는 pre-compile 된다. 이 결과물은 실행이 더 빠르다.

bsscco.github.io

 

원본

https://developer.android.com/studio/profile/baselineprofiles?hl=ko

 

기준 프로필  |  Android 개발자  |  Android Developers

기준 프로필 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 기준 프로필은 Android 런타임(ART)이 설치 중에 중요한 경로를 기계어 코드로 사전 컴파일하는 데

developer.android.com

 

 

내용

Baseline Profile의 역할과 중요성

  • Baseline Profile은 안드로이드 앱의 성능 향상을 위해 중요한 역할을 합니다. 이는 앱의 시작 시간과 런타임 성능을 개선하기 위해 사전 컴파일된 소스 코드 정보를 제공합니다.
  • 사용자가 앱을 처음 실행할 때 해석 및 실시간(JIT) 컴파일 단계를 건너뛰어 실행 속도를 향상시키며, 이를 통해 20-30%의 성능 개선을 기대할 수 있습니다.

Baseline Profile의 작동 방식

  • Android Runtime (ART)은 제공된 소스 코드 프로필을 사용하여 앱의 특정 코드 경로를 최적화합니다. 이 프로필에는 클래스와 메서드에 관한 정보가 포함되어 있으며, 이를 통해 AOT(사전 컴파일) 컴파일을 수행합니다.
  • 특히 많은 제3자 라이브러리를 사용하는 경우 Baseline Profile을 통한 최적화가 더욱 효과적입니다.

Baseline Profile의 구성 및 설정

  • Baseline Profile 모듈은 Android Gradle Plugin (AGP) 8.0 이상에서 사용할 수 있는 Baseline Profile Gradle 플러그인을 통해 설정할 수 있습니다. 이 플러그인은 Baseline Profile 생성을 간소화하고, 필요한 설정 옵션을 제공합니다.
  • Android Studio Iguana 이상의 버전에서는 Android Studio의 템플릿을 통해 Baseline Profile 모듈을 생성할 수 있습니다. 이는 특정 프로젝트나 모듈에 대해 Baseline Profile 생성을 단순화합니다.

라이브러리용 Baseline Profile

  • 라이브러리 제작자는 라이브러리에 Baseline Profile을 포함함으로써 개발자 경험을 향상시킬 수 있습니다. 이를 위해 Baseline Profile 플러그인을 라이브러리 프로젝트에 추가하고, 해당 라이브러리에서 필요한 Baseline Profile을 설정해야 합니다.
Android Gradle plugin: com.android.tools.build:8.0.0
Macrobenchmark library: androidx.benchmark:benchmark-macro-junit4:1.2.2
Profile Installer: androidx.profileinstaller:profileinstaller:1.3.1

 

Baseline Profile 생성

  • Baseline Profiles는 Android Studio에서 직접 생성할 수 있으며, 성공적으로 실행하면 각 모듈 아래에 baseline-prof.txt 파일이 생성됩니다. 이 파일에는 앱이나 라이브러리에 관한 클래스와 메서드의 선언이 포함되어 있습니다.

Baseline Profile의 성능 측정 및 분석

  • Baseline Profile을 통한 성능 개선을 측정하려면, Macrobenchmark와 같은 도구를 사용하여 앱의 시작 성능을 벤치마킹할 수 있습니다. 이는 Baseline Profile이 없는 경우와 비교하여 앱의 성능 향상을 명확하게 보여줍니다.
  • Baseline Profile이 포함된 APK/AAB 파일을 분석하여, 이러한 프로필이 올바르게 통합되었는지 확인할 수 있습니다. 이는 assets/dexopt/ 디렉토리에서 baseline.prof 파일을 통해 확인할 수 있습니다.

 

정리

Android앱은 기본적으로 DEX 파일 형태로 컴파일되고, 이 파일들은 Android Runtime에 의해 기기에서 실행됩니다.

ART는 이 DEX 파일들을 실시간으로 컴파일하며 앱을 실행시킵니다.

이 과정에서 발생하는 interperetation과 JIT 컴파일 단계는 앱의 시작 시간에 영향을 미칩니다.

Baseline으로 인해 ART는 앱의 중요한 코드경로(자주사용되는 함수나 클래스)를 설치되는 순간 미리 컴파일 합니다 (AOT, Ahead-Of-Time 컴파일) 이로인해 최적화된 코드를 실행하게 되므로, 앱의 시작 시간이 단축되고 전반적인 성능이 향상됩니다.

 

전혀몰랐던 정보인데 굉장히 좋은글입니다. 현재 하고있는 토이 프로젝트에 사용해봐야겠습니다.

 

 

 

 

https://androidweekly.net/

 

Android Weekly - Free weekly Android & Kotlin development newsletter

Android Weekly - Free weekly Android & Kotlin development newsletter

androidweekly.net