ProfileInstaller

  
라이브러리가 ART에서 읽을 컴파일 추적을 미리 채울 수 있습니다.
최근 업데이트 현재 안정화 버전 다음 버전 후보 베타 버전 알파 버전
2021년 9월 1일 1.0.2 - - 1.1.0-alpha04

종속 항목 선언

ProfileInstaller의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.

다음과 같이 앱 또는 모듈의 build.gradle 파일에 필요한 아티팩트의 종속 항목을 추가합니다.

Groovy

dependencies {
    implementation "androidx.profileinstaller:profileinstaller:1.1.0-alpha05"
}

Kotlin

dependencies {
    implementation("androidx.profileinstaller:profileinstaller:1.1.0-alpha05")
}

종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.

의견

제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 의견을 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.

새로운 문제 제출하기

자세한 내용은 Issue Tracker 문서를 참고하세요.

버전 1.1.0-alpha01

버전 1.1.0-alpha04

2021년 9월 1일

androidx.profileinstaller:profileinstaller:1.1.0-alpha04가 출시되었습니다. 버전 1.1.0-alpha04에 포함된 커밋을 확인하세요.

버그 수정

  • 베이스라인 프로필을 사용하는 앱이 CompilationMode.BaselineProfile로 MacroBenchmarks를 더 쉽게 실행하도록 ProfileInstaller를 수정했습니다. (I42657, b/196074999)

버전 1.1.0-alpha03

2021년 8월 18일

androidx.profileinstaller:profileinstaller:1.1.0-alpha03이 출시되었습니다. 버전 1.1.0-alpha03에 포함된 커밋을 확인하세요.

버그 수정

  • 앱의 파일 디렉터리에 있는 파일에 PackageInfo.lastUpdatedTime을 기록하고 다음 실행 시에 프로필 설치 전에 비교하기 위해 profileinstaller 건너뛰기 동작을 변경했습니다. (Ib93d1)
  • ART 요구사항을 준수하도록 P, Q, R 기기에 관한 프로필 형식을 조정했습니다. (I84e89)

버전 1.1.0-alpha02

2021년 8월 4일

androidx.profileinstaller:profileinstaller:1.1.0-alpha02가 출시되었습니다. 버전 1.1.0-alpha02에 포함된 커밋을 확인하세요.

Compose 1.1.0-alpha01과 호환되도록 업데이트했습니다.

버전 1.1.0-alpha01

2021년 7월 21일

androidx.profileinstaller:profileinstaller:1.1.0-alpha01이 출시되었습니다. 버전 1.1.0-alpha01에 포함된 커밋을 확인하세요.

버그 수정

  • 일부 상황에서 엄격 모드를 트리거하는 버그가 수정되었습니다.

버전 1.0.1

버전 1.0.2

2021년 9월 1일

androidx.profileinstaller:profileinstaller:1.0.2가 출시되었습니다. 버전 1.0.2에 포함된 커밋을 확인하세요.

버그 수정

  • P, Q, R 기기의 프로필 트랜스코딩이 추가되었습니다. 이 변경으로 인해 그러한 기기가 프로필을 트랜스코딩하기 때문에 작성된 프로필을 항상 ART에서 사용할 수 있습니다. 이전에는 그러한 플랫폼에서 트랜스코딩을 건너뛰었습니다. 이로 인해 종종 ART에서 소스 프로필을 처리하지 못했습니다. 개발자 API는 변경되지 않았습니다.

버전 1.0.1

버전 1.0.1

2021년 8월 4일

androidx.profileinstaller:profileinstaller:1.0.1이 출시되었습니다. 버전 1.0.1에 포함된 커밋을 확인하세요.

Compose 1.0.1과 호환되도록 업데이트했습니다.

버전 1.0.0

버전 1.0.0

2021년 7월 28일

androidx.profileinstaller:profileinstaller:1.0.0이 출시되었습니다. 버전 1.0.0에 포함된 커밋을 확인하세요.

1.0.0의 주요 기능

프로필 설치 프로그램은 라이브러리와 애플리케이션이 '프로필 규칙'을 정의하고 ART 프로필 정보를 APK와 번들로 묶을 수 있는 새로운 라이브러리입니다. 이 라이브러리가 애플리케이션 실행 후 이러한 프로필을 설치합니다. 애플리케이션 성능을 개선하는 데 활용할 수 있습니다.

이러한 프로필 규칙의 정보와 작동 방식에 관한 자세한 내용은 1.0.0-beta01의 세부 출시 노트를 참고하세요.

버전 1.0.0-rc02

2021년 7월 14일

androidx.profileinstaller:profileinstaller:1.0.0-rc02가 출시되었습니다. 버전 1.0.0-rc02에 포함된 커밋을 확인하세요.

버전 1.0.0-rc01

2021년 7월 1일

androidx.profileinstaller:profileinstaller:1.0.0-rc01이 출시되었습니다. 버전 1.0.0-rc01에 포함된 커밋을 확인하세요.

이 버전은 베타 버전에서 변경사항 없이 출시된 RC 버전입니다.

버전 1.0.0-beta01

2021년 6월 16일

androidx.profileinstaller:profileinstaller:1.0.0-beta01이 출시되었습니다. 버전 1.0.0-beta01에 포함된 커밋을 확인하세요.

라이브러리 용도

프로필 설치 프로그램은 라이브러리와 애플리케이션이 '프로필 규칙'을 정의하고 ART 프로필 정보를 APK와 번들로 묶을 수 있는 새로운 라이브러리입니다. 이 라이브러리가 애플리케이션 실행 후 이러한 프로필을 설치합니다. 애플리케이션 성능을 개선하는 데 활용할 수 있습니다.

이 프로필 설치는 androidx.startup 라이브러리를 통해 실행됩니다. 어떤 이유로든 프로필 설치를 사용 중지하려면 매니페스트를 수정하여 삭제하면 됩니다.


       <provider
           android:name="androidx.startup.InitializationProvider"
           android:authorities="${applicationId}.androidx-startup"
           android:exported="false"
           tools:node="merge">
           <meta-data android:name="androidx.profileinstaller.ProfileInstallerInitializer"
                     tools:node="remove" />
       </provider>

앱에 중요한 시작 요구사항이 있고 ProfileInstaller.writeProfile API를 사용하여 프로필 설치를 수동으로 트리거하려는 경우에 특히 유용합니다.

프로필 규칙이란 무엇인가요?

  • 라이브러리의 프로필 규칙은 src/main 또는 이에 상응하는 디렉터리에 있는 텍스트 파일 baseline-prof.txt에 지정됩니다. 이 파일에서는 줄별로 규칙을 지정합니다. 이때 규칙은 라이브러리의 메서드 또는 클래스와의 일치를 확인하는 패턴을 말합니다. 규칙의 구문은 adb shell profman --dump-classes-and-methods ...를 사용할 때 사용되며 사람이 읽을 수 있는 ART 프로필 형식의 상위 집합입니다. 규칙의 형식은 메서드 또는 클래스를 타겟팅하는 두 가지 형식 중 하나입니다.

  • 메서드 규칙의 패턴은 다음과 같습니다.

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • 클래스 규칙의 패턴은 다음과 같습니다.

    <CLASS_DESCRIPTOR>
    
  • 여기에서 <FLAGS>는 이 메서드의 플래그를 'Hot, 'Startup' 또는 'Post Startup' 중 무엇으로 지정해야 하는지를 나타내는 문자 H, S, P 중 하나 이상으로 구성됩니다.

  • <CLASS_DESCRIPTOR>는 타겟팅된 메서드가 속한 클래스의 설명자입니다. 예를 들어 androidx.compose.runtime.SlotTable 클래스는 Landroidx/compose/runtime/SlotTable;의 설명자를 포함합니다.

  • <METHOD_SIGNATURE>는 메서드의 서명이며 이름, 매개변수 유형, 메서드의 반환 유형을 포함합니다. 예를 들어 LayoutNodefun isPlaced(): Boolean 메서드는 서명이 isPlaced()Z입니다.

  • 이러한 패턴에는 단일 규칙이 여러 메서드나 클래스를 포괄하도록 와일드 카드(**, *, ?)가 포함될 수 있습니다.

규칙의 기능은 무엇인가요?

  • H 플래그는 'Hot' 메서드임을 나타내며, 이러한 메서드는 미리 컴파일해야 합니다.

  • S 플래그는 시작 시 호출되는 메서드임을 나타내며, 컴파일 비용을 발생시키키거나 시작 시 메서드를 해석하는 일을 피하려면 이러한 메서드를 미리 컴파일해야 합니다.

  • P 플래그는 시작 후에 호출되는 메서드임을 나타냅니다.

  • 이 파일에 있는 클래스는 시작 중에 사용된다는 사실을 나타내며, 클래스 로드 비용을 발생시키지 않으려면 클래스를 힙에 미리 할당해야 합니다.

원리는 무엇인가요?

  • 라이브러리는 이러한 규칙을 정의할 수 있고 규칙은 AAR 아티팩트에 패키징됩니다. 그런 다음 아티팩트가 포함된 APK가 빌드되면 규칙이 서로 병합되고 병합된 규칙은 APK와 관련된 압축 바이너리 ART 프로필을 빌드하는 데 사용됩니다. 그러면 APK가 기기에 설치된 경우 ART에서 이 프로필을 활용해 애플리케이션의 특정 하위 집합을 미리 컴파일하여 애플리케이션 성능 특히, 첫 번째 실행 성능을 높일 수 있습니다. 디버그 가능 애플리케이션에는 영향을 미치지 않습니다.

  • 규칙 파일의 이름은 baseline-prof.txt여야 하고 기본 소스 세트의 루트 디렉터리에 있어야 합니다(AndroidManifset.xml 파일의 동위 파일이어야 함).

  • 현재 이러한 파일은 Android Gradle 플러그인 7.0 이상을 사용하는 경우에만 활용되고 현재 gradle.properties의 플래그로만 사용 설정됩니다.

    # Enable adding baseline-prof.txt files to AAR artifacts, and binary profiles to APKs
    android.experimental.enableArtProfiles=true
    

프로필에 균형이 필요함

  • 시작 경로에 있고 성능에 중요한 메서드와 클래스의 우선순위를 올바르게 정한 제대로 만든 프로필은 최상의 결과를 냅니다. 그러나 메서드나 클래스를 프로필에 너무 많이 포함하면 메모리 소비와 디스크 사용량 면에서 최종적으로 부정적인 결과를 낳을 수 있으므로 자체 프로필 규칙을 정의하는 경우 보수적으로 시작하는 것이 좋습니다.