ProfileInstaller

  
Memungkinkan library mengisi otomatis rekaman aktivitas kompilasi terlebih dahulu sebelum dibaca oleh ART.
Update Terbaru Rilis Stabil Kandidat Rilis Rilis Beta Rilis Alfa
7 Februari 2024 1.3.1 - - 1.4.0-alpha01

Mendeklarasikan dependensi

Untuk menambahkan dependensi pada ProfileInstaller, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk mengetahui informasi selengkapnya.

Tambahkan dependensi untuk artefak yang diperlukan dalam file build.gradle bagi aplikasi atau modul Anda:

Groovy

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

Kotlin

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

Untuk informasi dependensi selengkapnya, lihat Menambahkan dependensi build.

Masukan

Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau mempunyai masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah diketahui dengan mengklik tombol bintang.

Laporkan masalah baru

Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.

Versi 1.4

Versi 1.4.0-alpha01

7 Februari 2024

androidx.profileinstaller:profileinstaller:1.4.0-alpha01 dirilis. Versi 1.4.0-alpha01 berisi commit ini.

Perbaikan Bug

  • Menambahkan kode error untuk tidak ada profil yang disematkan ke pemverifikasi profil. (Ifb109, b/313928520)
  • Memperbaiki error saat melepaskan shader pada Android U (API 34), serta pada emulator. (I031ca, b/274314544)
  • Mengaktifkan dukungan untuk Android U di penginstal profil. (Iaf177)
  • Memperbaiki penginstal profil di Android U yang gagal karena profil saat ini tidak dibuat kosong ketika proses dimulai. (Ie3899)
  • Memperbaiki transcoding bitmap metode dalam format profil V_015S. (aosp/2906631) dan (aosp/2847740)

Versi 1.3

Versi 1.3.1

3 Mei 2023

androidx.profileinstaller:profileinstaller:1.3.1 dirilis. Versi 1.3.1 berisi commit ini.

Perbaikan Bug

  • Mengaktifkan dukungan untuk Android U di penginstal profil (Iaf177)
  • Memperbaiki penginstal profil di Android U yang gagal karena profil saat ini tidak dibuat kosong ketika proses dimulai. (Ie3899)

Versi 1.3.0

22 Maret 2023

androidx.profileinstaller:profileinstaller:1.3.0 dirilis. Versi 1.3.0 berisi commit berikut ini.

Perubahan penting sejak versi 1.2.0

  • Memperbaiki NullPointerException dalam ProfileInstallReceiver. (b/243851384)
  • Menambahkan ProfileVerifier API untuk memeriksa dari dalam aplikasi jika profil dasar pengukuran telah dikompilasi, dijadwalkan, atau hilang (I263a4, b/246653809)
  • Menambahkan siaran shell baru yang memungkinkan Macrobenchmark menghapus data profil dalam memori pada disk agar disertakan dalam pembuatan profil dasar pengukuran. Tindakan ini diperlukan agar library macrobenchmark dapat digunakan untuk mengambil profil dasar pengukuran dengan BaselineProfileRule, dan mengevaluasi performa profil menggunakan CompilationMode.Partial(warmupIterations).
  • Menambahkan kode diagnostik untuk mendeteksi profil dasar pengukuran yang dikompresi. Profil dasar pengukuran yang dikompresi tidak dapat diinstal oleh Profileinstaller di Macrobenchmark atau dalam produksi karena overhead CPU, dan harus dihindari saat mem-build aplikasi dengan mengupdate ke Studio/AGP Electric Eel atau bundletool versi 1.13.1(I86413, b/261998144)
  • Menambahkan hook untuk macrobenchmark untuk mengambil profil dan menghapus cache shader, yang diperlukan untuk membuat Profil Dasar Pengukuran atau macrobenchmarking pada perangkat yang tidak di-root (Ie0a7d, b/250083467, b/253094958) (Ia5171, b/231455742)

Versi 1.3.0-rc01

8 Maret 2023

androidx.profileinstaller:profileinstaller:1.3.0-rc01 dirilis tanpa perubahan sejak versi beta terakhir. Versi 1.3.0-rc01 berisi commit ini.

Versi 1.3.0-beta01

8 Februari 2023

androidx.profileinstaller:profileinstaller:1.3.0-beta01 dirilis. Versi 1.3.0-beta01 berisi commit ini.

Perubahan API

  • Menghapus dukungan untuk menangani profil yang dikompresi - membuka dan mendekompresi akan menyebabkan regresi md selama 10 detik dalam penggunaan CPU selama startup, jadi sebagai gantinya, diagnostik ditambahkan untuk menemukan profil dasar pengukuran yang salah kompresi. (I86413, b/261998144)

Versi 1.3.0-alpha03

11 Januari 2023

androidx.profileinstaller:profileinstaller:1.3.0-alpha03 dirilis. Versi 1.3.0-alpha03 berisi commit ini.

Perbaikan Bug

  • Memungkinkan penanganan profil dasar pengukuran yang dikompresi atau tidak dikompresi (Ic61a0)
  • Memperbaiki MacrobenchmarkScope.dropShaderCache() agar tidak lagi error dengan memperbaiki registry siaran dalam manifes profileinstaller (I5c728, b/258619948)

Versi 1.3.0-alpha02

9 November 2022

androidx.profileinstaller:profileinstaller:1.3.0-alpha02 dirilis. Versi 1.3.0-alpha02 berisi commit ini.

Perubahan API

  • Menambahkan hook untuk benchmark guna menghapus cache shader, guna memastikan performa yang konsisten untuk cold startup, terutama saat mengompilasi dengan profil dari iterasi pemanasan. Update ini diperlukan untuk mengukur cold startup menggunakan benchmark-macro-junit4:1.2.0-alpha05 atau yang lebih baru. Untuk perubahan API library Benchmark, lihat halaman Benchmark 1.2.0-alpha07. (Ia5171, b/231455742)

Versi 1.3.0-alpha01

24 Oktober 2022

androidx.profileinstaller:profileinstaller:1.3.0-alpha01 dirilis. Versi 1.3.0-alpha01 berisi commit ini.

Perubahan API

  • Menambahkan ProfileVerifier API untuk memeriksa dari dalam aplikasi jika profil dasar pengukuran telah dikompilasi, dijadwalkan, atau hilang (I263a4, b/246653809)
  • Menambahkan siaran shell baru yang memungkinkan Macrobenchmark menghapus data profil dalam memori pada disk agar disertakan dalam pembuatan profil dasar pengukuran. Tindakan ini diperlukan agar library macrobenchmark dapat digunakan untuk mengambil profil dasar pengukuran dengan BaselineProfileRule, dan mengevaluasi performa profil menggunakan CompilationMode.Partial(warmupIterations). (Ie0a7d, b/250083467, b/253094958)

Versi 1.2.2

Versi 1.2.2

11 Januari 2023

androidx.profileinstaller:profileinstaller:1.2.2 dirilis. Versi 1.2.2 berisi commit ini.

Perbaikan Bug

  • Memungkinkan penanganan profil dasar pengukuran yang dikompresi atau tidak dikompresi (Ic61a0)

Versi 1.2.1

Versi 1.2.1

7 Desember 2022

androidx.profileinstaller:profileinstaller:1.2.1 dirilis. Versi 1.2.1 berisi commit ini.

Fitur Baru

  • Mengaktifkan profileinstaller untuk S_V2 (API 32) dan TIRAMISU (API 33) (b/254900303).

Versi 1.2.0

Versi 1.2.0

27 Juli 2022

androidx.profileinstaller:profileinstaller:1.2.0 dirilis. Versi 1.2.0 berisi commit ini.

Perubahan penting sejak 1.1.0

  • Menambahkan dukungan untuk format profil ART yang digunakan di Android 12 dan yang lebih baru.
  • Menambahkan API baru di ProfileInstallReceiver untuk mendapatkan hasil yang lebih konsisten dengan Macrobenchmarks saat menggunakan profil dasar pengukuran.

Versi 1.2.0-rc01

15 Juni 2022

androidx.profileinstaller:profileinstaller:1.2.0-rc01 dirilis. Versi 1.2.0-rc01 berisi commit ini.

  • Versi ini sama persis dengan androidx.profileinstaller:profileinstaller:1.2.0-beta03.

Versi 1.2.0-beta03

1 Juni 2022

androidx.profileinstaller:profileinstaller:1.2.0-beta03 dirilis. Versi 1.2.0-beta03 berisi commit ini.

Versi 1.2.0-beta02

18 Mei 2022

androidx.profileinstaller:profileinstaller:1.2.0-beta02 dirilis. Versi 1.2.0-beta02 berisi commit ini.

  • Tidak ada perubahan yang diperlukan untuk mendukung versi Compose 1.2.0-beta02.

Versi 1.2.0-beta01

11 Mei 2022

androidx.profileinstaller:profileinstaller:1.2.0-beta01 dirilis. Versi 1.2.0-beta01 berisi commit ini.

Perubahan API

  • Menambahkan API baru di ProfileInstallReceiver untuk mendapatkan hasil yang lebih konsisten dengan Macrobenchmarks saat menggunakan profil dasar pengukuran. (If2ae5, b/215740637)

Perbaikan Bug

  • Profile Installer akan menampilkan pesan yang berguna saat mencoba menggunakan format metadata V_001 di Android 12 dan yang lebih baru. (aosp/1978526, b/217502387)
  • Profile Installer sekarang menggunakan androidx.startup versi 1.1.1. (aosp/2077099, b/229828376)

Versi 1.2.0-alpha02

26 Januari 2022

androidx.profileinstaller:profileinstaller:1.2.0-alpha02 dirilis. Versi 1.2.0-alpha02 berisi commit ini.

Versi ini sama persis dengan 1.2.0-alpha01.

Versi 1.2.0-alpha01

12 Januari 2022

androidx.profileinstaller:profileinstaller:1.2.0-alpha01 dirilis. Versi 1.2.0-alpha01 berisi commit ini.

Fitur Baru

  • Menambahkan dukungan untuk format profil ART yang digunakan di Android 12 dan yang lebih baru.

Versi 1.1.0

Versi 1.1.0

9 Februari 2022

androidx.profileinstaller:profileinstaller:1.1.0 dirilis. Versi 1.1.0 berisi commit ini.

Versi 1.1.0-rc01

15 Desember 2021

androidx.profileinstaller:profileinstaller:1.1.0-rc01 dirilis tanpa perubahan sejak versi 1.1.0-beta04. Versi 1.1.0-rc01 berisi commit ini.

Versi 1.1.0-beta04

1 Desember 2021

androidx.profileinstaller:profileinstaller:1.1.0-beta04 dirilis. Versi 1.1.0-beta04 berisi commit ini.

Versi 1.1.0-beta03

17 November 2021

androidx.profileinstaller:profileinstaller:1.1.0-beta03 dirilis. Versi 1.1.0-beta03 berisi commit ini.

Perbaikan Bug

  • Diupdate agar mendukung Compose 1.1.0-beta03

Versi 1.1.0-beta02

3 November 2021

androidx.profileinstaller:profileinstaller:1.1.0-beta02 dirilis. Versi 1.1.0-beta02 berisi commit ini.

Perbaikan Bug

  • Diupdate agar mendukung Compose 1.1.0-beta02

Versi 1.1.0-beta01

27 Oktober 2021

androidx.profileinstaller:profileinstaller:1.1.0-beta01 dirilis. Versi 1.1.0-beta01 berisi commit ini.

  • Tidak ada perubahan sejak versi 1.1.0-alpha07.

Versi 1.1.0-alpha07

13 Oktober 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha07 dirilis. Versi 1.1.0-alpha07 berisi commit ini.

Fitur Baru

  • Menambahkan dukungan untuk profm di Android N

Versi 1.1.0-alpha06

29 September 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha06 dirilis. Versi 1.1.0-alpha06 berisi commit ini.

Perbaikan Bug

  • Memperbaiki masalah transcoding profileinstaller di N, O, dan O_MR1. (I12d75)

Versi 1.1.0-alpha05

15 September 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha05 dirilis. Versi 1.1.0-alpha05 berisi commit ini.

Perbaikan Bug

  • Memperbaiki transcoding profil Android Nougat dan Android Oreo untuk apk multidex.

Versi 1.1.0-alpha04

1 September 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha04 dirilis. Versi 1.1.0-alpha04 berisi commit ini.

Perbaikan Bug

  • Memperbaiki ProfileInstaller untuk mempermudah aplikasi menggunakan profil dasar pengukuran guna menjalankan MacroBenchmarks menggunakan CompilationMode.BaselineProfile. (I42657, b/196074999)

Versi 1.1.0-alpha03

18 Agustus 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha03 dirilis. Versi 1.1.0-alpha03 berisi commit ini.

Perbaikan Bug

  • Mengubah perilaku lewati profileinstaller untuk mencatat log PackageInfo.lastUpdatedTime di file dalam direktori file aplikasi, dan membandingkannya sebelum menginstal profil pada proses berikutnya. (Ib93d1)
  • Menyesuaikan format profil di perangkat P, Q, R agar sesuai dengan persyaratan ART (I84e89)

Versi 1.1.0-alpha02

4 Agustus 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha02 dirilis. Versi 1.1.0-alpha02 berisi commit ini.

Diupdate agar kompatibel dengan Compose 1.1.0-alpha01.

Versi 1.1.0-alpha01

21 Juli 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha01 dirilis. Versi 1.1.0-alpha01 berisi commit ini.

Perbaikan Bug

  • Memperbaiki bug yang akan memicu mode ketat dalam situasi tertentu.

Versi 1.0

Versi 1.0.4

13 Oktober 2021

androidx.profileinstaller:profileinstaller:1.0.4 dirilis. Versi 1.0.4 berisi commit ini.

  • Diupdate agar mendukung Compose 1.0.4

Versi 1.0.3

29 September 2021

androidx.profileinstaller:profileinstaller:1.0.3 dirilis. Versi 1.0.3 berisi commit ini.

  • Diupdate agar mendukung Compose 1.0.3

Versi 1.0.2

1 September 2021

androidx.profileinstaller:profileinstaller:1.0.2 dirilis. Versi 1.0.2 berisi commit ini.

Perbaikan Bug

  • Menambahkan transcoding profil untuk perangkat P, Q, R. Perubahan ini berarti bahwa perangkat ini akan melakukan transcoding profil, memastikan bahwa profil tertulis selalu dapat digunakan oleh ART. Sebelumnya, transcoding akan dilewati di platform ini, yang terkadang menyebabkan ART tidak dapat memproses profil sumber. Tidak ada perubahan pada API developer.

Versi 1.0.1

4 Agustus 2021

androidx.profileinstaller:profileinstaller:1.0.1 dirilis. Versi 1.0.1 berisi commit ini.

Diupdate agar kompatibel dengan Compose 1.0.1.

Versi 1.0.0

28 Juli 2021

androidx.profileinstaller:profileinstaller:1.0.0 dirilis. Versi 1.0.0 berisi commit ini.

Fitur utama 1.0.0

Profile Installer adalah library baru yang memungkinkan library dan aplikasi menentukan “Aturan Profil” dan memaketkan informasi profil ART dengan APK, dan library ini akan menginstal profil tersebut setelah peluncuran aplikasi. Ini dapat digunakan untuk meningkatkan performa aplikasi.

Lihat catatan rilis mendetail di 1.0.0-beta01 untuk mengetahui informasi selengkapnya tentang pengertian aturan profil ini dan cara kerjanya.

Versi 1.0.0-rc02

14 Juli 2021

androidx.profileinstaller:profileinstaller:1.0.0-rc02 dirilis. Versi 1.0.0-rc02 berisi commit ini.

Versi 1.0.0-rc01

1 Juli 2021

androidx.profileinstaller:profileinstaller:1.0.0-rc01 dirilis. Versi 1.0.0-rc01 berisi commit ini.

Ini adalah rilis RC dan tidak ada perubahan dari versi beta.

Versi 1.0.0-beta01

16 Juni 2021

androidx.profileinstaller:profileinstaller:1.0.0-beta01 dirilis. Versi 1.0.0-beta01 berisi commit ini.

Tujuan Library

Profile Installer adalah library baru yang memungkinkan library dan aplikasi menentukan “Aturan Profil” dan memaketkan informasi profil ART dengan APK, dan library ini akan menginstal profil tersebut setelah peluncuran aplikasi. Ini dapat digunakan untuk meningkatkan performa aplikasi.

Penginstalan profil ini dilakukan dengan library androidx.startup. Jika karena alasan apa pun seseorang ingin menonaktifkan penginstalan profil, mereka dapat mengubah manifes untuk menghapusnya:


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

Hal ini sangat berguna jika aplikasi Anda memiliki persyaratan startup yang tidak umum dan Anda ingin memicu penginstalan profil secara manual menggunakan ProfileInstaller.writeProfile API.

Apa itu aturan profil?

  • Aturan profil untuk library ditentukan dalam file teks baseline-prof.txt yang berada di src/main atau direktori yang setara. File ini menetapkan aturan per baris. Dalam hal ini, aturan adalah pola untuk pencocokan dengan metode atau class dalam library. Sintaksis untuk aturan ini adalah superset dari format profil ART yang dapat dibaca manusia yang digunakan saat menggunakan adb shell profman --dump-classes-and-methods .... Aturan ini menggunakan salah satu dari dua bentuk untuk ditarget, yaitu metode atau class.

  • Aturan metode akan memiliki pola berikut:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • Dan aturan class akan memiliki pola berikut:

    <CLASS_DESCRIPTOR>
    
  • Di sini, <FLAGS> adalah satu atau beberapa karakter H, S, dan P untuk menunjukkan apakah metode ini harus ditandai sebagai "Hot", "Startup", atau "Post Startup".

  • <CLASS_DESCRIPTOR> adalah deskripsi untuk class tempat metode yang ditargetkan berada. Misalnya, class androidx.compose.runtime.SlotTable akan memiliki deskripsi Landroidx/compose/runtime/SlotTable;.

  • <METHOD_SIGNATURE> adalah tanda tangan metode, dan menyertakan nama, jenis parameter, serta jenis nilai yang ditampilkan metode. Misalnya, metode fun isPlaced(): Boolean pada LayoutNode memiliki tanda tangan isPlaced()Z.

  • Pola ini dapat memiliki karakter pengganti (**, *, dan ?) agar memiliki satu aturan yang mencakup beberapa metode atau class.

Apa fungsi aturan tersebut?

  • Metode yang memiliki flag H menunjukkan bahwa metode ini adalah metode "hot", dan harus dikompilasi sebelumnya.

  • Metode yang memiliki flag S menunjukkan bahwa ini adalah metode yang dipanggil saat memulai, dan harus dikompilasi terlebih dahulu untuk menghindari biaya kompilasi dan penafsiran metode tersebut pada waktu mulai.

  • Metode yang memiliki flag P menunjukkan bahwa ini adalah metode yang dipanggil setelah memulai.

  • Class yang ada dalam file ini menunjukkan bahwa class digunakan saat memulai dan harus dialokasikan sebelumnya di heap untuk menghindari biaya pemuatan class.

Bagaimana cara kerjanya?

  • Library dapat menentukan aturan ini yang akan dikemas dalam artefak AAR. Saat APK kemudian dibuat dengan menyertakan artefak ini, aturan ini digabung menjadi satu dan aturan yang digabungkan digunakan untuk membuat profil ART biner ringkas yang khusus untuk APK. ART kemudian dapat memanfaatkan profil ini saat APK diinstal pada perangkat untuk mengompilasi subset aplikasi tertentu terlebih dahulu guna meningkatkan performa aplikasi, terutama saat dijalankan pertama kali. Perhatikan bahwa tindakan ini tidak akan berpengaruh pada aplikasi yang dapat di-debug.

  • File aturan harus diberi nama baseline-prof.txt dan ditempatkan di direktori utama set sumber utama Anda (harus berupa file seinduk ke file AndroidManifset.xml Anda)

  • Saat ini file tersebut hanya akan digunakan jika Anda menggunakan Plugin Android Gradle 7.0+, dan saat ini hanya diaktifkan dengan flag di gradle.properties:

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

Profil memerlukan keseimbangan

  • Profil yang dibuat dengan benar yang memprioritaskan metode dan class dengan benar yang akan berada di jalur startup dan performa penting akan memberikan hasil terbaik, tetapi menyertakan terlalu banyak metode atau class dalam profil dapat berdampak negatif bersih dalam hal penggunaan memori dan penggunaan disk. Jadi, sebaiknya mulailah secara hati-hati jika menetapkan aturan profil Anda sendiri.