앱 개발자는 Jetpack Macrobenchmark 라이브러리와 BaselineProfileRule
을 사용하여 각 앱 버전에 맞는 프로필을 자동으로 생성할 수 있습니다. 기준 프로필을 사용할 때는 빌드 개선사항이 적용된 com.android.tools.build:gradle:7.4.1
이상을 사용하는 것이 좋습니다.
기준 프로필 생성기 정의하기
Macrobenchmark 라이브러리를 사용하여 기준 프로필을 만들려면 다음 단계를 따르세요.
Gradle 프로젝트에서 Macrobenchmark 모듈을 설정합니다.
BaselineProfileGenerator
라는 이름의 다음과 같은 새 테스트를 정의합니다.@OptIn(ExperimentalBaselineProfilesApi::class) class BaselineProfileGenerator { @get:Rule val baselineProfileRule = BaselineProfileRule() @Test fun startup() = baselineProfileRule.collectBaselineProfile( packageName = "com.example.app", profileBlock = { startActivityAndWait() } ) }
생성기에는 앱 시작 이후에 발생하는 앱과의 상호작용이 포함될 수 있습니다. 이를 통해 목록 스크롤, 애니메이션 실행, 활동 내 탐색과 같은 앱의 런타임 성능을 최적화할 수 있습니다.
@BaselineProfileRule
을 사용하여 중요한 사용자 여정을 개선하는 몇 가지 테스트 예제를 살펴보세요.(선택사항) 기준 프로필을 생성할 때는 난독화를 사용 중지해야 합니다. 난독화를 중지하려면 앱 모듈에 다른 Proguard 파일을 만들고 프로필 생성을 담당하는
benchmark
빌드 유형에 관해서만-dontobfuscate
를 추가하면 됩니다.Kotlin
buildTypes { val benchmark by creating { // Only use benchmark proguard rules proguardFiles("benchmark-rules.pro") // ... } }
Groovy
buildTypes { benchmark { // Only use benchmark proguard rules proguardFiles 'benchmark-rules.pro' // ... } }
기준 프로필 생성
루팅된 실제 기기, 에뮬레이터 또는 Gradle 관리 기기에서 계측 테스트로 생성기를 실행합니다. 관리 기기를 설정하려면
build.gradle.kts
파일을 열고testOptions
구성 블록 내에managedDevices
와devices
를 추가한 다음 에뮬레이터의 정의를 만듭니다. 기준 프로필 생성기에 대한 루트 액세스 권한이 필요하므로systemImageSource
로aosp
를 사용해야 합니다.Kotlin
testOptions { managedDevices { devices { create ("pixel6Api31", ManagedVirtualDevice::class) { device = "Pixel 6" apiLevel = 31 systemImageSource = "aosp" } } } }
Groovy
testOptions { managedDevices { devices { pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) { device = "Pixel 6" apiLevel = 31 systemImageSource = "aosp" } } } }
Gradle은 선택된 기기 이름과 모듈에서 사용할 수 있는 빌드 변형을 기반으로 필수 작업을 만듭니다. 형식은
[emulator_name][flavor][build type]AndroidTest
입니다. 이 작업은 터미널에서 다음과 같이 실행할 수 있습니다../gradlew :benchmark:pixel6Api31BenchmarkAndroidTest
생성된 규칙 적용하기
기준 프로필 생성기는 기기에 사람이 읽을 수 있는 텍스트 파일(HRF)을 만들고 그 파일을 호스트 머신에 복사합니다. 생성된 프로필을 코드에 적용하려면 다음 단계를 따르세요.
프로필을 생성한 모듈의 빌드 폴더(
[module]/build/outputs/managed_device_android_test_additional_output/[device]
)에서 프로필을 찾습니다.프로필은
[class name]-[test method name]-baseline-prof.txt
와 같은 이름 지정 패턴을 따릅니다(예:BaselineProfileGenerator-startup-baseline-prof.txt
).생성된 프로필과
AndroidManifest.xml
을 앱 모듈의src/main/
에 복사하고 프로필 파일 이름을baseline-prof.txt
로 바꿉니다.클라우드 프로필을 사용할 수 없는 경우 로컬 기준 프로필 컴파일을 사용할 수 있도록 앱의
build.gradle
에 ProfileInstaller 라이브러리에 관한 종속 항목을 추가합니다. 이는 로컬에서 기준 프로필을 사이드로드하는 유일한 방법입니다.dependencies { implementation("androidx.profileinstaller:profileinstaller:1.2.2") }
적용된 HRF 규칙이 바이너리 형식으로 압축되어 APK 또는 AAB에 포함되는 동안 앱의 프로덕션 버전을 빌드합니다. 그런 다음 평소 앱을 배포하던 방식으로 앱을 배포합니다.
추가 참고사항
기준 프로필을 만들 때 다음 사항에 유의하세요.
바이너리 기준 프로필은 1.5MB 미만이어야 합니다. APK의 경우
assets/dexopt/baseline.prof
, AAB의 경우BUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof
아래의 출력 아티팩트에서 기준 프로필을 찾아 프로필의 크기를 확인할 수 있습니다.애플리케이션의 너무 많은 부분을 컴파일하는 광범위한 규칙은 디스크 액세스 횟수가 늘기 때문에 시작 속도를 느리게 만들 수 있습니다. 기준 프로필을 이제 막 사용하기 시작한 경우에는 시작 속도를 걱정하지 않아도 됩니다. 그러나 여러1 여정을 추가하기 시작한 경우 다양한 프로필을 시도하고 여정 추가로 인해 성능이 저하되지 않았는지 확인하는 방식으로 앱 성능을 테스트해야 합니다.
Codelab
Macrobenchmark로 앱 성능 검사
기준 프로필을 사용하여 앱 성능 개선
-
앱 크기 및 여정 개수에 따라 다릅니다. ↩