시작 프로필 만들기

시작 프로필은 기준 프로필의 하위 집합입니다. 시작 프로필은 다음에 의해 사용됩니다. 포함하는 클래스와 메서드를 APK의 DEX 파일에 있는 코드 레이아웃 개선 시작 프로필을 사용하면 앱 시작 속도가 기준 프로필만 사용할 때보다 최대 15% 빠릅니다.

그림 1. DEX 레이아웃의 코드 위치 개선 최적화됩니다.

요구사항

다음 도구와 함께 시작 프로필을 사용하는 것이 좋습니다.

  • Jetpack Macrobenchmark 1.2.0 이상
  • Android Gradle 플러그인 8.2 이상
  • Android 스튜디오 Iguana 이상

또한 앱에서 다음 설정이 필요합니다.

  • R8이 사용 설정됩니다. 출시 빌드에 다음과 같이 설정합니다. isMinifyEnabled = true
  • DEX 레이아웃 최적화가 사용 설정되었습니다. 다음 항목의 baselineProfile {} 블록에서 앱 모듈의 빌드 파일에 dexLayoutOptimization = true를 설정하세요.

시작 프로필 만들기

Android 스튜디오에서는 시작 시 기준 프로필과 함께 시작 프로필을 기본 기준 프로필 생성기 템플릿을 사용합니다.

시작 프로필을 만들고 생성하는 일반적인 단계는 다음과 같습니다. 기준 프로필을 만듭니다.

시작 프로필을 만드는 기본 방법은 기준 프로필을 사용하는 것입니다. Android 스튜디오 내의 Generator 모듈 템플릿 여기에는 스타트업이 포함됩니다. 기본 스타트업 프로필을 형성하는 상호작용입니다. 이 시작 프로필을 보강하려면 더 많은 중요한 사용자 여정 (CUJ)이 있는 경우 앱 시작 CUJ를 rule에 추가하세요. includeInStartupProfiletrue로 설정된 블록. 간단한 앱의 경우 앱의 MainActivity로 충분할 수 있습니다. 더 복잡한 앱의 경우 가장 일반적인 진입점을 앱에 추가(예: 딥 링크로 이동하는 동작입니다.

다음 코드 스니펫은 기준 프로필 생성기를 보여줍니다 (기본적으로 BaselineProfileGenerator.kt 파일)를 포함해야 합니다. 딥 링크로 실행됩니다. 딥 링크는 앱의 뉴스 피드가 아닌 앱의 홈 화면이 아닌 앱의 뉴스 피드를 확인하세요.

@RunWith(AndroidJUnit4::class)
@LargeTest
class BaselineProfileGenerator {

    @get:Rule
    val rule = BaselineProfileRule()

    @Test
    fun generate() {
        rule.collect(
            packageName = "com.example.app",
            includeInStartupProfile = true
        ) {
            // Launch directly into the NEWS_FEED.
            startActivityAndWait(Intent().apply {
                setPackage(packageName)
                setAction("com.example.app.NEWS_FEED")
            })
        }
    }
}

Generate Baseline Profile for app(앱 구성용 기준 프로필 생성)을 실행하고 시작 프로필 규칙 위치: src/<variant>/generated/baselineProfiles/startup-prof.txt입니다.

시작 프로필 최적화 확인

DEX 레이아웃 최적화를 확인하려면 Android 스튜디오를 사용하여 APK를 열고 DEX 파일의 클래스를 확인합니다 기본 classes.dex가 다음과 같은 상태가 아니어야 합니다. 완전히 채워져 있습니다. 앱이 단일 DEX 파일로 구성된 경우 시작 프로필을 사용 설정한 후 앱에 DEX 파일 두 개가 포함되어 있는지 여부

시작 클래스가 단일 DEX 파일에 맞지 않으면 Android 스튜디오에서 경고를 표시합니다. 진단 정보를 얻기 위해 시작 클래스의 경우 R8 컴파일러가 버전 이상의 버전으로 업데이트되었는지 확인합니다. 8.3.36-dev를 업데이트할 때 settings.gradle 파일을 다음과 같이 변경합니다. 시작 프로필을 적용합니다.

Kotlin

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url = uri("https://storage.googleapis.com/r8-releases/raw")
            }
        }
        dependencies {
            classpath("com.android.tools:r8:8.3.6-dev")
        }
    }
}

Groovy

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url uri('https://storage.googleapis.com/r8-releases/raw')
            }
        }
        dependencies {
            classpath 'com.android.tools:r8:8.3.6-dev"
        }
    }
}

다음에 --info을(를) 추가해야 합니다. assembleRelease로 설정합니다.

./gradlew assembleRelease --info

그러면 진단이 터미널에 출력됩니다.

앱 또는 라이브러리가 디슈가링된 API를 참조하는 경우 번들 이러한 클래스의 호환성 구현은 항상 마지막 DEX 파일 디슈가링된 이 마지막 DEX 파일은 DEX 레이아웃에 참여하지 않습니다. 최적화할 수 있습니다

시작 프로필 생성 고려사항

시작 프로필의 클래스 및 메서드의 출력은 시작 프로필의 크기에 따라 제한됩니다. 첫 번째 class.dex 파일을 생성합니다. 즉, 모든 기준 프로필 여정이 시작 프로필 여정이어야 합니다

시작 프로필을 만들 때 다룰 사용자 여정을 결정하려면 애플리케이션을 시작하는 위치를 선택할 수 있습니다 일반적으로 런처에서 얻고 표시됩니다. 가장 기본적인 기준 프로필이기도 합니다. 있습니다.

첫 번째 사용 사례를 다룬 후 앱의 사용자 유입경로를 따릅니다. 시작하겠습니다 대부분의 경우 앱 시작 유입경로는 다음 목록을 따릅니다.

  1. 기본 런처 활동
  2. 앱 시작을 트리거하는 알림
  3. 선택적 런처 활동

이 목록을 위에서부터 처리하고 class.dex가 가득 차기 전에 중지합니다. 덮기 위해 시작 경로 밖으로 코드를 이동하여 있습니다. 코드를 시작 경로 외부로 이동하려면 앱 시작 중에 Perfetto 트레이스를 검사하세요. 장기 실행 작업을 찾습니다 macrobenchmark를 사용하여 메서드 추적 사용 설정 를 사용하세요.