기준 프로필을 사용하여 시작 시간 최적화

  • 베이스라인 프로파일은 AOT를 사용하여 첫 번째 릴리스에서 JIT 컴파일에 대한 의존성을 제거합니다.
  • 이 기능은 중요한 코드 경로를 미리 컴파일하여 시작 시간을 단축하고 스크롤링을 더욱 부드럽게 해줍니다.
  • 이러한 기능들은 실제 사용량을 기반으로 프로필 생성을 자동화하는 매크로벤치마크 모듈을 통해 통합됩니다.
  • 이러한 구현은 첫 순간부터 즉각적인 경험을 제공함으로써 사용자 유지율에 직접적인 영향을 미칩니다.

기준 프로필을 사용하여 시작 시간 최적화

오늘날 누구도 앱이 로딩되는 것을 기다릴 인내심이 없습니다. 모바일 환경에서 반응성은 사용자가 앱을 계속 사용할지 아니면 몇 초 만에 삭제할지를 결정짓는 중요한 요소입니다. 복잡한 인터페이스가 즉시 로드되도록 하려면 기존의 코드 최적화 수준을 넘어, 기기가 화면에 도달하기 전에 명령어를 처리하는 방식에 집중해야 합니다.

시작 지연 문제를 해결하기 위해 Google은 개발자가 필수적인 코드 경로를 표시할 수 있는 혁신적인 도구인 베이스라인 프로필(Baseline Profiles)을 도입했습니다. 이를 통해 기기가 앱을 처음 실행할 때 실행 방법을 "탐색"할 필요가 없어지므로, 클린 설치든 업데이트든 관계없이 첫 실행부터 원활한 성능을 제공합니다.

베이스라인 프로파일이란 정확히 무엇이며 어떻게 작동하는가?

이를 이해하려면 먼저 안드로이드가 안드로이드 런타임(ART)을 사용한다는 것을 알아야 합니다. 기존에는 앱 실행 중에 코드를 변환하는 JIT(Just-In-Time) 컴파일 이나, 모든 작업을 미리 수행하는 AOT(Ahead-Of-Time) 컴파일 방식 을 사용해 왔습니다 . JIT 컴파일의 문제점은 코드가 처음부터 최적화되지 않기 때문에 사소한 버벅거림이나 초기 속도 저하를 유발할 수 있다는 것입니다.

베이스라인 프로파일은 마스터 가이드 역할을 합니다. 기본적으로 사용자가 앱을 열기 전에 시스템이 AOT(자동 실행)를 사용하여 미리 컴파일 해야 하는 클래스와 메서드 목록입니다 . 이렇게 하면 런타임이 코드를 즉석에서 해석할 필요가 없으므로 초기 실행 속도가 최대 30%까지 향상 될 수 있습니다.

수천 명의 사용자가 앱을 사용하고 Google Play에서 해당 데이터를 추가하는 데 며칠이 걸리는 클라우드 프로필과 달리, 베이스라인 프로필은 Android 앱 번들(AAB) 에 직접 포함되어 제공됩니다 . 즉, 최적화가 즉시 적용되어 새롭게 업데이트된 버전에서 흔히 발생하는 "느린" 현상이 사라집니다.

이 기술을 적용해야 하는 경우는 언제입니까?

모든 애플리케이션에 동일한 수준의 최적화가 필요한 것은 아니지만, 최적화가 필수적인 경우가 있습니다. 특히 스플래시 화면에 많은 종속성이 있거나 복잡한 렌더링이 필요한 경우, 프로파일링은 콜드 스타트 ​​시간을 줄이는 데 매우 중요합니다 . 첫 실행은 느리지만 두 번째 실행은 매우 빠르다면, 프로파일링을 통해 해결할 수 있는 컴파일 문제가 있는 것입니다.

게다가, 이러한 기능은 스타트업에만 유용한 것이 아닙니다. 스크롤링의 부드러움을 향상시키는 데에도 매우 효과적입니다. 목록 로직과 애니메이션을 미리 컴파일하면 프레임 드롭을 방지하여 콘텐츠 탐색이 훨씬 매끄럽게 느껴집니다. 또한 결제나 회원가입 절차와 같이 반복적으로 사용되는 기능을 최적화하는 데에도 이상적이며 , 가장 자주 사용되는 경로를 가장 빠르게 만들 수 있습니다.

생성 모듈의 단계별 구성

이를 구현하는 가장 최신 방법은 Android Studio의 전용 모듈을 이용하는 것입니다. 시작하려면 다음 단계로 이동해야 합니다. 새 모듈 템플릿을 선택하세요 기준 프로필 생성기여기에서 대상 애플리케이션과 모듈 이름(예: baselineprofile선호하는 언어(Kotlin 또는 Java)를 알려주세요.

이 프로세스는 테스트 환경 생성을 자동화합니다. 마법사가 플러그인을 구성합니다. androidx.baselineprofile 그리고 라이브러리를 추가할 것입니다. 프로필 설치 프로그램 애플리케이션 모듈에서, 이 모듈은 클라우드 프로필을 지원하지 않는 구형 안드로이드 버전을 포함하여 사용자의 기기에 프로필이 올바르게 설치되도록 보장하는 역할을 합니다.

중요한 기술적 세부 사항은 난독화 관리입니다. 프로필이 유효하려면 `isMinifyEnabled`가 `false`로 설정된 변형에서 생성되어야 합니다 . 하지만 최종 버전에 대해서는 걱정하지 마세요. R8은 프로덕션 APK의 난독화된 코드에 맞춰 프로필 규칙을 다시 작성하여 최대 보안과 크기 최적화를 유지할 수 있습니다.

핵심 사용자 여정(CUJ) 생성

앱을 실행하는 기본 프로필도 유용하지만, 성능을 최대한 활용하려면 다음과 같은 기능을 정의해야 합니다. 핵심 사용자 여정이것은 수업 내에서 이루어집니다. BaselineProfileGenerator 규칙을 사용하다 BaselineProfileRule. 블록 내부 collect우리는 사용자가 실제로 취할 행동을 시뮬레이션해야 합니다.

시각적 및 기능적 회귀 테스트 자동화
관련기사:
시각적 및 기능적 회귀 테스트 자동화 완벽 가이드

예를 들어, 앱이 비동기적으로 로드되는 경우 단순히 호출하는 것만으로는 충분하지 않습니다. startActivityAndWait()콘텐츠가 최종적으로 나타날 때 실행되는 코드를 시스템에 등록하려면 스마트 대기 기능을 구현해야 합니다. 이는 인터페이스와의 상호 작용을 통해 이루어집니다. UIAutomator특정 요소를 찾고 테스트가 종료되기 전에 해당 요소가 나타나기를 기다립니다.

고급 워크플로우의 경우, 생성기를 프로그래밍할 수 있습니다. 목록을 세로로 스크롤합니다 사용 방법 fling상세 화면으로 이동하거나 시스템 권한 관리 대화 상자를 열 수도 있습니다. 시뮬레이션 과정이 정확할수록 생성된 프로필의 정확도도 높아지므로, 결과적으로 더 정확한 프로필을 만들 수 있습니다. 경험이 더욱 원활해질 것입니다 실제 최종 사용자.

성능 생성 및 검증

제너레이터 작성이 완료되면 이제 실행할 차례입니다. 이상적으로는 다음을 사용해야 합니다. Gradle 관리 장치(GMD) 또는 이미지가 있는 에뮬레이터 aosp 루트 권한이 필요하지만, 최근 버전의 라이브러리는 이미 물리적 장치에서 프로필을 생성할 수 있도록 지원합니다. 안드로이드 13 이상 합병증없이.

Gradle 작업을 실행할 때 :app:generateBaselineProfile시스템은 앱을 여러 번 실행하고, 호출된 클래스와 메서드를 수집하여 파일을 생성합니다. baseline-prof.txt이 파일은 앱의 assets 폴더에 자동으로 배치되어 AAB 패키지에 포함될 준비가 됩니다.

그것이 실제로 효과가 있는지 알아보기 위해 우리는 다음을 사용했습니다. 젯팩 매크로벤치마크우리는 두 가지 시나리오를 비교하는 테스트를 만들었습니다. 하나는 다음과 같은 시나리오입니다. CompilationMode.None() (최적화 없이) 그리고 다른 하나는 최적화를 적용한 경우 CompilationMode.Partial() (프로필을 사용하여) 지표를 분석할 때 전체 화면 표시 시간컴파일 시간이 밀리초 단위로 급격히 단축되는 것은 흔히 볼 수 있는 현상이며, 이는 핵심 코드를 더 이상 실시간으로 컴파일할 필요가 없다는 것을 입증합니다.

대규모 앱과 같은 실제 시나리오에서 JIT(Just-in-Time) 스레드의 사용률이 25%에서 3%로 감소하는 것이 관찰되었습니다. 이는 CPU 리소스를 확보하고 기기의 발열을 줄여 특히 저사양 기기에서 더욱 안정적이고 효율적인 앱을 구현할 수 있도록 합니다.

베이스라인 프로파일을 구현하는 것은 사용자 경험 측면에서 가장 비용 효율적인 투자 중 하나입니다. 소프트웨어가 처음부터 가볍고 반응성이 뛰어난 느낌을 줄 수 있기 때문입니다. 벤치마크 모듈을 활용하여 부팅 시간을 생성하고 지속적으로 검증하면, 개발자는 느린 애플리케이션을 사용자 유지율을 높이는 즉각적이고 전문적인 도구로 탈바꿈시킬 수 있습니다.


Google에서 선호하는 검색 엔진으로 추가