ProfileInstaller

  
ART에서 읽을 컴파일 트레이스를 라이브러리가 미리 채울 수 있습니다.
최근 업데이트 안정화 버전 출시 후보 버전 베타 버전 알파 버전
2024년 2월 7일 1.3.1 - - 1.4.0-alpha01

종속 항목 선언

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

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

Groovy

dependencies {
    implementation "androidx.profileinstaller:profileinstaller:1.3.1"
}

Kotlin

dependencies {
    implementation("androidx.profileinstaller:profileinstaller:1.3.1")
}

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

의견

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

새로운 문제 제출하기

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

버전 1.4

버전 1.4.0-alpha01

2024년 2월 7일

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

버그 수정

  • 프로필 인증 도구에 삽입된 프로필 없음에 대한 오류 코드를 추가했습니다. 추가했습니다. (Ifb109, b/313928520)
  • Android U (API 34)와 에뮬레이터에서 셰이더를 삭제할 때 발생하는 비정상 종료 문제를 수정합니다. 추가했습니다. (I031ca, b/274314544)
  • 프로필 설치 프로그램에서 Android U 지원이 사용 설정되었습니다. 추가했습니다. (Iaf177)
  • 프로세스 시작 시 현재 프로필이 비어 있지 않아 Android U의 프로필 설치 프로그램이 실패하는 문제를 수정했습니다. 추가했습니다. (Ie3899)
  • V_015S 프로필 형식의 메서드 비트맵 트랜스코딩을 수정합니다. (aosp/2906631aosp/2847740 참조)

버전 1.3

버전 1.3.1

2023년 5월 3일

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

버그 수정

  • 프로필 설치 프로그램에서 Android U 지원을 사용 설정했습니다. (Iaf177)
  • 프로세스 시작 시 현재 프로필이 비어 있지 않아 Android U의 프로필 설치 프로그램이 실패하는 문제를 수정했습니다. 추가했습니다. (Ie3899)

버전 1.3.0

2023년 3월 22일

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

1.2.0 이후 중요 변경사항

  • ProfileInstallReceiverNullPointerException이 수정되었습니다. b/243851384를 참조하세요.
  • 기준 프로필이 컴파일 또는 예약되었거나 누락된 경우 앱 내에서 확인할 수 있도록 ProfileVerifier API를 추가했습니다. (I263a4, b/246653809)
  • Macrobenchmark에서 메모리 내 프로필 데이터를 디스크에 완전히 플러시하여 기준 프로필 생성에 포함시키는 새로운 셸 브로드캐스트가 추가되었습니다. 이는 Macrobenchmark 라이브러리를 사용하여 BaselineProfileRule로 기준 프로필을 캡처하고 CompilationMode.Partial(warmupIterations)을 사용하여 프로필 성능을 평가하는 데 필요합니다.
  • 압축된 기준 프로필을 감지하는 진단 코드가 추가되었습니다. CPU 오버헤드로 인해 Macrobenchmarks에서 또는 프로덕션 환경에서 압축된 기준 프로필을 설치할 수 없으며 앱을 빌드할 때 Studio/AGP Electric Eel 또는 bundletool 버전 1.13.1로 업데이트하여 피해야 합니다. (I86413, b/261998144)
  • 루팅되지 않은 기기에서 기준 프로필을 생성하거나 Macrobenchmark를 생성하는 데 필요한 Macrobenchmark 후크를 추가하여 프로필을 캡처하고 셰이더 캐시를 삭제합니다. (Ie0a7d, b/250083467, b/253094958) (Ia5171, b/231455742)

버전 1.3.0-rc01

2023년 3월 8일

androidx.profileinstaller:profileinstaller:1.3.0-rc01이 지난 베타 이후 변경사항 없이 출시되었습니다. 버전 1.3.0-rc01에 포함된 커밋을 확인하세요.

버전 1.3.0-beta01

2023년 2월 8일

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

API 변경사항

  • 압축된 프로필을 처리하는 기능을 삭제했습니다. 시작 시 열기 및 압축 해제를 위해 CPU 사용률에서 10초의 회귀가 발생하므로 잘못 압축된 기준 프로필을 찾기 위한 진단을 추가했습니다. (I86413, b/261998144)

버전 1.3.0-alpha03

2023년 1월 11일

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

버그 수정

  • 압축된 기준 프로필 또는 압축되지 않은 기준 프로필을 처리할 수 있습니다. (Ic61a0)
  • profileinstaller 매니페스트에서 브로드캐스트 레지스트리를 수정하여 더 이상 비정상 종료되지 않도록 MacrobenchmarkScope.dropShaderCache()를 수정했습니다. (I5c728, b/258619948)

버전 1.3.0-alpha02

2022년 11월 9일

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

API 변경사항

  • 특히 준비 반복에서 프로필로 컴파일할 때 콜드 스타트의 일관된 성능을 보장하도록 셰이더 캐시를 삭제하는 벤치마크용 후크를 추가했습니다. 이 업데이트는 benchmark-macro-junit4:1.2.0-alpha05 이상을 사용하여 콜드 스타트를 측정하는 데 필요합니다. Benchmark 라이브러리의 API 변경사항은 Benchmark 1.2.0-alpha07 페이지를 참고하세요. (Ia5171, b/231455742)

버전 1.3.0-alpha01

2022년 10월 24일

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

API 변경사항

  • 기준 프로필이 컴파일, 예약 또는 누락되었는지 앱 내에서 확인하기 위한 ProfileVerifier API를 추가했습니다. (I263a4, b/246653809)
  • Macrobenchmark에서 메모리 내 프로필 데이터를 디스크에 완전히 플러시하여 기준 프로필 생성에 포함시키는 새로운 셸 브로드캐스트가 추가되었습니다. 이는 Macrobenchmark 라이브러리를 사용하여 BaselineProfileRule로 기준 프로필을 캡처하고 CompilationMode.Partial(warmupIterations)을 사용하여 프로필 성능을 평가하는 데 필요합니다. (Ie0a7d, b/250083467, b/253094958)

버전 1.2.2

버전 1.2.2

2023년 1월 11일

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

버그 수정

  • 압축된 기준 프로필 또는 압축되지 않은 기준 프로필을 처리할 수 있습니다. (Ic61a0)

버전 1.2.1

버전 1.2.1

2022년 12월 7일

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

새로운 기능

  • S_V2(API 32) 및 TIRAMISU(API 33)용 ProfileInstaller를 사용 설정했습니다. (b/254900303).

버전 1.2.0

버전 1.2.0

2022년 7월 27일

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

1.1.0 이후 중요 변경사항

  • Android 12부터 사용되는 ART 프로필 형식 지원을 추가했습니다.
  • 기준 프로필을 사용할 때 Macrobenchmarks로 더 일관된 결과를 얻기 위해 ProfileInstallReceiver에 새 API를 추가했습니다.

버전 1.2.0-rc01

2022년 6월 15일

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

  • 이 버전은 androidx.profileinstaller:profileinstaller:1.2.0-beta03과 동일합니다.

버전 1.2.0-beta03

2022년 6월 1일

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

버전 1.2.0-beta02

2022년 5월 18일

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

  • 변경사항은 없으며 Compose 1.2.0-beta02 버전을 지원하는 데 필요합니다.

버전 1.2.0-beta01

2022년 5월 11일

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

API 변경사항

  • 기준 프로필을 사용할 때 Macrobenchmarks로 더 일관된 결과를 얻기 위해 ProfileInstallReceiver에 새 API를 추가했습니다. (If2ae5, b/215740637)

버그 수정

  • 프로필 설치 프로그램이 Android 12 이상에서 V_001 메타데이터 형식을 사용하려고 할 때 유용한 메시지를 표시합니다. (aosp/1978526, b/217502387)
  • 이제 프로필 설치 프로그램이 androidx.startup 버전 1.1.1을 사용합니다. (aosp/2077099, b/229828376)

버전 1.2.0-alpha02

2022년 1월 26일

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

이 버전은 1.2.0-alpha01과 동일합니다.

버전 1.2.0-alpha01

2022년 1월 12일

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

새로운 기능

  • Android 12부터 사용되는 ART 프로필 형식 지원을 추가합니다.

버전 1.1.0

버전 1.1.0

2022년 2월 9일

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

버전 1.1.0-rc01

2021년 12월 15일

androidx.profileinstaller:profileinstaller:1.1.0-rc01 버전은 1.1.0-beta04 이후 업데이트 없이 출시되었습니다. 버전 1.1.0-rc01에 포함된 커밋을 확인하세요.

버전 1.1.0-beta04

2021년 12월 1일

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

버전 1.1.0-beta03

2021년 11월 17일

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

버그 수정

  • Compose 1.1.0-beta03을 지원하도록 업데이트했습니다.

버전 1.1.0-beta02

2021년 11월 3일

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

버그 수정

  • Compose 1.1.0-beta02를 지원하도록 업데이트했습니다.

버전 1.1.0-beta01

2021년 10월 27일

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

  • 1.1.0-alpha07 이후 변경사항이 없습니다.

버전 1.1.0-alpha07

2021년 10월 13일

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

새로운 기능

  • Android N에 propm 지원을 추가했습니다.

버전 1.1.0-alpha06

2021년 9월 29일

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

버그 수정

  • N, O, O_MR1에서 발생하는 profileinstaller 트랜스코딩 문제를 수정합니다. (I12d75)

버전 1.1.0-alpha05

2021년 9월 15일

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

버그 수정

  • 멀티덱스 APK용 Android Nougat 및 Android Oreo 프로필 트랜스코딩을 수정했습니다.

버전 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.0.4

2021년 10월 13일

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

  • Compose 1.0.4를 지원하도록 업데이트했습니다.

버전 1.0.3

2021년 9월 29일

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

  • Compose 1.0.3을 지원하도록 업데이트했습니다.

버전 1.0.2

2021년 9월 1일

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

버그 수정

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

버전 1.0.1

2021년 8월 4일

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

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

버전 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
    

프로필에 균형이 필요함

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