ProfileInstaller

  
Memungkinkan library mengisi otomatis rekaman aktivitas kompilasi terlebih dahulu sebelum dibaca oleh ART.
Update Terbaru Rilis Stabil Saat Ini Kandidat Rilis Berikutnya Rilis Beta Rilis Alfa
1 September 2021 1.0.2 - - 1.1.0-alpha04

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.1.0-alpha05"
}

Kotlin

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

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.1.0-alpha01

Versi 1.1.0-alpha04

1 September 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha04 dirilis. Versi 1.1.0-alpha04 berisi commit berikut 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 berikut 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 berikut 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 berikut.

Perbaikan Bug

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

Versi 1.0.1

Versi 1.0.2

1 September 2021

androidx.profileinstaller:profileinstaller:1.0.2 dirilis. Versi 1.0.2 berisi commit berikut 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

Versi 1.0.1

4 Agustus 2021

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

Diupdate agar kompatibel dengan Compose 1.0.1.

Versi 1.0.0

Versi 1.0.0

28 Juli 2021

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

Fitur utama 1.0.0

Penginstal profil 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 berikut ini.

Versi 1.0.0-rc01

1 Juli 2021

androidx.profileinstaller:profileinstaller:1.0.0-rc01 dirilis. Versi 1.0.0-rc01 berisi commit berikut 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 berikut ini.

Tujuan Library

Penginstal profil 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 pemasangan 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 API ProfileInstaller.writeProfile.

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 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 menargetkan 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 kumpulan sumber utama Anda (harus berupa file pasangan ke file AndroidManifset.xml Anda)

  • Saat ini file tersebut hanya akan digunakan jika Anda menggunakan Android Gradle Plugin 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 mulai secara konservatif jika menetapkan aturan profil Anda sendiri.