기준 프로필 만들기

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

앱 개발자는 Jetpack Macrobenchmark 라이브러리BaselineProfileRule을 사용하여 각 앱 버전에 맞는 프로필을 자동으로 생성할 수 있습니다. 기준 프로필을 사용할 때는 빌드 개선사항이 적용된 com.android.tools.build:gradle:7.4.1 이상을 사용하는 것이 좋습니다.

기준 프로필 생성기 정의하기

Macrobenchmark 라이브러리를 사용하여 기준 프로필을 만들려면 다음 단계를 따르세요.

  1. Gradle 프로젝트에서 Macrobenchmark 모듈을 설정합니다.

  2. BaselineProfileGenerator라는 이름의 다음과 같은 새 테스트를 정의합니다.

    @OptIn(ExperimentalBaselineProfilesApi::class)
    class BaselineProfileGenerator {
        @get:Rule
        val baselineProfileRule = BaselineProfileRule()
    
        @Test
        fun startup() = baselineProfileRule.collectBaselineProfile(
            packageName = "com.example.app",
            profileBlock = {
                startActivityAndWait()
            }
        )
    }
    

    생성기에는 앱 시작 이후에 발생하는 앱과의 상호작용이 포함될 수 있습니다. 이를 통해 목록 스크롤, 애니메이션 실행, 활동 내 탐색과 같은 앱의 런타임 성능을 최적화할 수 있습니다. @BaselineProfileRule을 사용하여 중요한 사용자 여정을 개선하는 몇 가지 테스트 예제를 살펴보세요.

  3. (선택사항) 기준 프로필을 생성할 때는 난독화를 사용 중지해야 합니다. 난독화를 중지하려면 모듈에 다른 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'
            // ...
        }
    }
    

기준 프로필 생성

  1. 루팅된 실제 기기, 에뮬레이터 또는 Gradle 관리 기기에서 계측 테스트로 생성기를 실행합니다. 관리 기기를 설정하려면 build.gradle.kts 파일을 열고 testOptions 구성 블록 내에 managedDevicesdevices를 추가한 다음 에뮬레이터의 정의를 만듭니다. 기준 프로필 생성기에 대한 루트 액세스 권한이 필요하므로 systemImageSourceaosp를 사용해야 합니다.

    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"
                }
            }
        }
    }
    
  2. Gradle은 선택된 기기 이름과 모듈에서 사용할 수 있는 빌드 변형을 기반으로 필수 작업을 만듭니다. 형식은 [emulator_name][flavor][build type]AndroidTest입니다. 이 작업은 터미널에서 다음과 같이 실행할 수 있습니다.

    ./gradlew :benchmark:pixel6Api31BenchmarkAndroidTest
    

생성된 규칙 적용하기

기준 프로필 생성기는 기기에 사람이 읽을 수 있는 텍스트 파일(HRF)을 만들고 그 파일을 호스트 머신에 복사합니다. 생성된 프로필을 코드에 적용하려면 다음 단계를 따르세요.

  1. 프로필을 생성한 모듈의 빌드 폴더([module]/build/outputs/managed_device_android_test_additional_output/[device])에서 프로필을 찾습니다.

    프로필은 [class name]-[test method name]-baseline-prof.txt와 같은 이름 지정 패턴을 따릅니다(예: BaselineProfileGenerator-startup-baseline-prof.txt).

  2. 생성된 프로필과 AndroidManifest.xml을 앱 모듈의 src/main/에 복사하고 프로필 파일 이름을 baseline-prof.txt로 바꿉니다.

  3. 클라우드 프로필을 사용할 수 없는 경우 로컬 기준 프로필 컴파일을 사용할 수 있도록 앱의 build.gradleProfileInstaller 라이브러리에 관한 종속 항목을 추가합니다. 이는 로컬에서 기준 프로필을 사이드로드하는 유일한 방법입니다.

    dependencies {
         implementation("androidx.profileinstaller:profileinstaller:1.2.2")
    }
    
  4. 적용된 HRF 규칙이 바이너리 형식으로 압축되어 APK 또는 AAB에 포함되는 동안 앱의 프로덕션 버전을 빌드합니다. 그런 다음 평소 앱을 배포하던 방식으로 앱을 배포합니다.

추가 참고사항

기준 프로필을 만들 때 다음 사항에 유의하세요.

  • 바이너리 기준 프로필은 1.5MB 미만이어야 합니다. APK의 경우 assets/dexopt/baseline.prof, AAB의 경우 BUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof 아래의 출력 아티팩트에서 기준 프로필을 찾아 프로필의 크기를 확인할 수 있습니다.

  • 애플리케이션의 너무 많은 부분을 컴파일하는 광범위한 규칙은 디스크 액세스 횟수가 늘기 때문에 시작 속도를 느리게 만들 수 있습니다. 기준 프로필을 이제 막 사용하기 시작한 경우에는 시작 속도를 걱정하지 않아도 됩니다. 그러나 여러1 여정을 추가하기 시작한 경우 다양한 프로필을 시도하고 여정 추가로 인해 성능이 저하되지 않았는지 확인하는 방식으로 앱 성능을 테스트해야 합니다.

Codelab

Macrobenchmark에 관해 자세히 알아보고 성능을 측정합니다.
Android 앱에 맞게 조정된 맞춤 기준 프로필을 생성하고 효과를 확인합니다.

  1. 앱 크기 및 여정 개수에 따라 다릅니다.