Ringkasan Profil Dasar Pengukuran

Profil Dasar Pengukuran meningkatkan kecepatan eksekusi kode sekitar 30% sejak peluncuran pertama dengan menghindari langkah interpretasi dan kompilasi tepat waktu (JIT) untuk jalur kode yang disertakan.

Dengan mengirimkan Profil Dasar Pengukuran dalam aplikasi atau library, Android Runtime (ART) dapat mengoptimalkan jalur kode yang ditentukan melalui kompilasi Ahead of Time (AOT), yang memberikan peningkatan performa untuk setiap pengguna baru dan setiap update aplikasi. Pengoptimalan yang Dipandu Profil (PGO) ini memungkinkan aplikasi mengoptimalkan startup, mengurangi jank interaksi, dan meningkatkan performa runtime secara keseluruhan untuk pengguna sejak peluncuran pertama.

Peningkatan performa ini secara langsung menghasilkan metrik bisnis yang lebih baik, seperti retensi pengguna, transaksi, dan rating. Anda dapat membaca selengkapnya tentang pengaruh performa terhadap metrik bisnis dalam cerita dari Josh, Lyft, TikTok, dan Zomato.

Manfaat Profil Dasar Pengukuran

Profil Dasar Pengukuran memungkinkan pra-kompilasi kode dalam interaksi pengguna yang penting, seperti startup aplikasi, menavigasi antar-layar, atau men-scroll konten, sehingga lebih lancar sejak pertama kali dijalankan. Dengan meningkatkan kecepatan dan responsivitas aplikasi, Profil Dasar Pengukuran dapat menghasilkan lebih banyak pengguna aktif harian dan rasio kunjungan kembali rata-rata yang lebih tinggi.

Profil Dasar Pengukuran membantu memandu pengoptimalan di luar startup aplikasi dengan menyediakan interaksi pengguna umum yang membuat runtime aplikasi efektif sejak peluncuran pertama. Kompilasi AOT yang dipandu tidak mengandalkan perangkat pengguna dan dapat dilakukan sekali per rilis pada mesin pengembangan, bukan perangkat seluler. Dengan mengirimkan rilis menggunakan Profil Dasar Pengukuran, pengoptimalan aplikasi akan tersedia jauh lebih cepat daripada hanya mengandalkan Profil Cloud.

Jika tidak menggunakan Profil Dasar Pengukuran, semua kode aplikasi dikompilasi secara JIT dalam memori setelah diinterpretasikan, atau ditulis ke file odex di latar belakang saat perangkat tidak ada aktivitas. Setelah menginstal atau mengupdate aplikasi, pengalaman pengguna menjadi kurang optimal sejak pertama kali mereka menjalankannya hingga jalur kode baru dioptimalkan. Banyak aplikasi mengukur peningkatan performa sekitar 30% setelah pengoptimalan.

Profil startup

Profil startup mirip dengan Profil Dasar Pengukuran, tetapi digunakan pada waktu kompilasi untuk mengoptimalkan tata letak DEX agar waktu startup lebih cepat, bukan untuk pengoptimalan di perangkat. Untuk mempelajari lebih lanjut perbedaan profil peluncuran dengan Profil Dasar Pengukuran, lihat Membandingkan Profil Dasar Pengukuran dan Profil Peluncuran. Untuk mengetahui informasi selengkapnya tentang pengoptimalan tata letak DEX, lihat Pengoptimalan tata letak DEX dan profil peluncuran.

Memulai

Untuk mulai mengoptimalkan performa di aplikasi yang sudah ada, lihat Membuat Profil Dasar Pengukuran.

Pembuatan profil vs. build rilis

Penting untuk memahami perbedaan konfigurasi build yang diperlukan saat membuat file profil dasar pengukuran dan startup (misalnya, baseline-prof.txt dan startup-prof.txt) dibandingkan saat membangun APK rilis akhir yang menggunakan profil ini.

Saat membuat file profil (misalnya, benchmark):

Untuk memastikan aturan profil yang dibuat secara akurat cocok dengan tanda tangan metode kode Anda, Anda harus menonaktifkan pengaburan dan pengoptimalan (R8) untuk varian build yang digunakan untuk pembuatan profil. Varian ini harus berbeda dari varian build rilis Anda, yang mengaktifkan pengaburan dan pengoptimalan. Anda dapat melakukannya dengan menyetel isMinifyEnabled = false untuk varian build pembuatan profil. Jika Anda tidak menggunakan plugin Gradle Profil Dasar Pengukuran, Anda juga harus memastikan bahwa -dontobfuscate dan -dontoptimize diterapkan. Plugin Gradle Profil Dasar Pengukuran menangani konfigurasi ini secara otomatis untuk Anda.

Saat membangun APK rilis akhir:

Build rilis Anda harus selalu memiliki isMinifyEnabled = true untuk mendapatkan manfaat dari obfuscation, minifikasi, dan pengoptimalan. R8 secara otomatis menulis ulang aturan dari file profil yang tidak di-obfuscate agar cocok dengan kode yang di-obfuscate dan dioptimalkan dalam APK rilis Anda. Agar pengoptimalan tata letak DEX (yang didorong oleh Profil Startup) efektif, aplikasi rilis Anda harus di-obfuscate dan menggunakan R8 dengan semua pengoptimalan diaktifkan.

Rantai dependensi menyediakan versi rilis stabil dan versi rilis pengembangan. Untuk membuat dan menginstal Profil Dasar Pengukuran, gunakan plugin Android Gradle, library Macrobenchmark, dan Penginstal Profil dalam versi yang didukung berikut atau yang lebih tinggi. Dependensi ini diperlukan pada waktu yang berbeda dan berfungsi bersama sebagai toolchain untuk mengaktifkan Profil Dasar Pengukuran yang optimal.

  • Plugin Android Gradle: com.android.tools.build:8.0.0
  • Library Macrobenchmark: androidx.benchmark:benchmark-macro-junit4:1.4.1
  • Penginstal Profil: androidx.profileinstaller:profileinstaller:1.4.1

Sebaiknya gunakan AGP versi terbaru untuk membuat dan mengelola Profil Dasar Pengukuran. Berikut adalah fungsi utama yang disertakan dalam berbagai versi AGP:

Versi AGP Fitur
8.4 Penginstalan aplikasi lokal pada build yang tidak dapat di-debug menggunakan alat command line wrapper Gradle atau penginstalan Profil Dasar Android Studio, sehingga performa build rilis lokal Anda lebih cocok dengan produksi. Pembaruan ini tidak memengaruhi performa produksi Profil Dasar Pengukuran.
8.3
  • Dukungan direktori set sumber penuh (modul library): mendeklarasikan beberapa file sumber Profil Dasar Pengukuran, dan menggunakan direktori berbasis varian, seperti src/free/generated/baselineProfiles/baseline-prof1.txt, sekarang juga untuk modul library dan modul aplikasi.
  • Profil Dasar Pengukuran mencakup class desugaring.
8.2
  • Penulisan ulang aturan R8: D8 dan R8 dapat mengubah aturan Profil Dasar Pengukuran dan Startup yang dapat dibaca manusia guna sepenuhnya menangkap semua aturan yang Anda perlukan untuk mengoptimalkan performa aplikasi. Hal ini memungkinkan Anda membuat profil dari build yang tidak diminifikasi dan menerapkannya ke build rilis yang diminifikasi. Meningkatkan cakupan Profil Dasar Pengukuran metode sebesar ~30% dan meningkatkan performa aplikasi sebesar ~15%.
  • Profil Startup: membuat jenis Profil Dasar Pengukuran baru ini untuk menginformasikan tata letak kode dalam DEX. Meningkatkan performa startup sebesar ~15%, atau jauh lebih besar untuk aplikasi besar.
8.0 Versi minimum yang direkomendasikan: gunakan plugin Gradle Profil Dasar Pengukuran untuk membuat Profil Dasar Pengukuran dengan satu tugas Gradle.
  • Dukungan direktori set sumber penuh (modul aplikasi): mendeklarasikan beberapa file sumber Profil Dasar Pengukuran, dan menggunakan direktori berbasis varian, seperti src/free/generated/baselineProfiles/baseline-prof1.txt.
7.4 Versi minimum yang didukung: aplikasi dapat menggunakan Profil Dasar Pengukuran dari library, dan menyediakan Profil Dasar Pengukuran miliknya sendiri dalam file src/main/baseline-prof.txt.
  • Profil Dasar Pengukuran dikemas dengan benar saat membangun APK dari app bundle (masalah #230361284).
  • Untuk aplikasi yang memiliki lebih dari satu file .dex, Profil Dasar Pengukuran dikemas dengan benar untuk file .dex utama.
  • D8 dan R8 mendukung pembuatan profil startup dari build dengan isMinifyEnabled disetel ke false.

Setelan sumber profil yang mendukung varian

Dengan menggunakan Plugin Android Gradle (AGP) versi 8.0 untuk aplikasi dan AGP versi 8.3 untuk library, Anda dapat menempatkan aturan Profil Dasar Pengukuran di direktori set sumber khusus, sehingga tidak lagi terikat pada batasan satu jalur tetap (misalnya, src/main/baseline-prof.txt) dan memungkinkan penggunaan beberapa file.

Hal ini memfasilitasi dukungan varian yang kuat, sehingga Anda dapat menentukan Profil Dasar yang berbeda-beda yang disesuaikan dengan jenis dan ragam build tertentu (misalnya, menggunakan direktori seperti src/variant/baselineProfiles/), yang memastikan aturan pengoptimalan performa diterapkan secara tepat untuk setiap biner aplikasi atau library yang unik.

Contoh pembuatan profil

Berikut adalah contoh class untuk membuat Profil Dasar Pengukuran untuk memulai aplikasi, serta beberapa peristiwa navigasi dan scroll menggunakan library Macrobenchmark yang direkomendasikan.

class BaselineProfileGenerator {
    @get:Rule
    val baselineProfileRule = BaselineProfileRule()

    @Test
    fun appStartupAndUserJourneys() {
        baselineProfileRule.collect(packageName = PACKAGE_NAME) {
            uiAutomator {
                // App startup journey.
                startApp(PACKAGE_NAME)

                // Find and click elements using the new DSL
                onElement { textAsString() == "COMPOSE LAZYLIST" }.click()
                onElement { viewIdResourceName == "myLazyColumn" }.also {
                    it.fling(Direction.DOWN)
                    it.fling(Direction.UP)
                }
                pressBack()
            }
        }
    }
}

Untuk mengetahui informasi selengkapnya tentang penggunaan library UI Automator untuk mengotomatiskan perjalanan pengguna, lihat Menulis pengujian otomatis dengan UI Automator.

Anda dapat melihat kode ini dalam konteks lengkap dan detail selengkapnya sebagai bagian dari contoh performa di GitHub.

Yang harus disertakan

Saat menggunakan Profil Dasar Pengukuran dalam aplikasi, Anda dapat menyertakan kode startup aplikasi dan interaksi pengguna umum, seperti navigasi antarlayar atau scroll. Anda juga dapat mengumpulkan seluruh alur seperti pendaftaran, login, atau pembayaran. Perjalanan pengguna apa pun yang Anda anggap penting bisa mendapatkan manfaat dari Profil Dasar Pengukuran yang meningkatkan performa runtime-nya.

Jika Anda bereksperimen dengan berbagai pendekatan untuk meningkatkan performa, sebaiknya sertakan Profil Dasar Pengukuran untuk kedua grup eksperimen Anda. Dengan begitu, Anda dapat membuat hasil lebih mudah ditafsirkan dengan memastikan semua pengguna menjalankan secara konsisten kode yang dikompilasi.

Library dapat menyediakan Profil Dasar Pengukurannya sendiri dan mengirimkannya dengan rilis untuk meningkatkan performa aplikasi. Misalnya, lihat Menggunakan bagian Profil Dasar Pengukuran dalam performa Jetpack Compose.

Cara kerja Profil Dasar Pengukuran

Saat mengembangkan aplikasi atau library, sebaiknya tentukan Profil Dasar Pengukuran untuk mencakup interaksi pengguna umum yang mementingkan waktu rendering atau latensi. Berikut ini cara kerjanya:

  1. Aturan profil yang dapat dibaca manusia dibuat untuk aplikasi Anda dan dikompilasi ke dalam bentuk biner dalam aplikasi. Anda dapat menemukannya di assets/dexopt/baseline.prof. Kemudian, Anda dapat mengupload Android App Bundle (AAB) ke Google Play seperti biasa.

  2. Google Play memproses profil dan mengirimkannya langsung kepada pengguna beserta APK. Selama penginstalan, ART melakukan kompilasi metode AOT di profil, sehingga metode tersebut dieksekusi lebih cepat. Jika profil berisi metode yang digunakan dalam peluncuran aplikasi atau selama rendering frame, pengguna mungkin akan mengalami waktu peluncuran yang lebih cepat dan berkurangnya jank.

  3. Alur ini bekerja sama dengan agregasi Profil Cloud untuk meningkatkan kualitas performa berdasarkan penggunaan aplikasi yang sebenarnya dari waktu ke waktu.

Gambar 1. Diagram ini menunjukkan alur kerja Profil Dasar Pengukuran dari upload hingga pengiriman ke pengguna akhir, dan bagaimana alur kerja tersebut berkaitan dengan Profil Cloud.

Membandingkan Profil Dasar Pengukuran dan Profil Startup

Anda menggunakan Plugin Gradle Profil Dasar Pengukuran untuk menentukan dan membuat file profil. Plugin ini terhubung ke proses build, dan AGP mengompilasi aturan profil yang dapat dibaca manusia ini ke dalam format biner—dikemas sebagai baseline.prof dalam APK atau AAB—yang dapat digunakan ART secara efektif untuk kompilasi di perangkat, asalkan ukurannya lebih kecil dari 1,5 MB.

File profil yang dihasilkan ini biasanya diberi nama startup-prof.txt dan baseline-prof.txt. Meskipun isinya terkadang tampak serupa, terutama jika Anda berfokus pada startup, keduanya memiliki tujuan yang berbeda dan memengaruhi performa pada tahap yang berbeda:

Profil Dasar Pengukuran

File Profil Dasar Pengukuran berisi serangkaian aturan komprehensif yang digunakan Android Runtime (ART) untuk melakukan prakompilasi jalur kode yang sering digunakan, yang mengoptimalkan performa aplikasi tidak hanya saat startup.

File Profil Dasar Pengukuran umumnya merupakan superset aturan yang ditemukan di Profil Peluncuran Anda. File ini mencakup semua aturan yang diperlukan untuk pengoptimalan peluncuran aplikasi (dibuat melalui tugas Gradle baselineProfile), beserta profil tambahan untuk perjalanan pengguna penting lainnya. Misalnya, men-scroll, dan menavigasi layar yang berbeda.

Aturan tambahan non-startup ini dibuat terlepas dari nilai kolom konfigurasi includeInStartupProfile.

Profil Startup

File Profil Startup berisi aturan yang dioptimalkan secara khusus untuk jalur startup aplikasi Anda. Selama kompilasi, D8 mengonversi bytecode Java ke format DEX. Kemudian, R8 menggunakan file ini untuk memengaruhi tata letak file DEX Anda, memastikan bahwa kode startup penting ditempatkan di file DEX utama agar eksekusinya lebih cepat. Anda umumnya harus menyetel includeInStartupProfile ke true hanya untuk skenario pengujian yang penting untuk tampilan awal aplikasi. Untuk mengetahui informasi selengkapnya, lihat Membuat Profil Startup.

Profil Cloud

Profil Cloud menawarkan bentuk PGO tambahan—yang digabungkan oleh Google Play Store dan didistribusikan untuk kompilasi waktu penginstalan—beserta Profil Dasar Pengukuran.

Meskipun Profil Cloud dioperasikan oleh interaksi pengguna dengan aplikasi di dunia nyata, perlu waktu beberapa jam hingga beberapa hari sampai update selesai didistribusikan, sehingga membatasi ketersediaannya. Hingga profil didistribusikan sepenuhnya, performa aplikasi akan kurang optimal bagi pengguna aplikasi baru atau yang diupdate. Selain itu, Profil Cloud hanya mendukung perangkat Android yang menjalankan Android 9 (API level 28) atau yang lebih baru dan hanya dapat diskalakan dengan baik untuk aplikasi yang memiliki basis pengguna yang cukup besar.

Perilaku kompilasi di seluruh versi Android

Versi Platform Android menggunakan pendekatan kompilasi aplikasi yang berbeda, masing-masing dengan kompromi performa yang terkait. Profil Dasar Pengukuran meningkatkan metode kompilasi sebelumnya dengan menyediakan profil untuk semua penginstalan.

Versi Android Metode kompilasi Pendekatan pengoptimalan
5 hingga 6 (API level 21 hingga 23) AOT Penuh Seluruh aplikasi dioptimalkan selama penginstalan, sehingga menyebabkan waktu tunggu yang lama untuk menggunakan aplikasi, peningkatan penggunaan RAM dan ruang disk, serta waktu yang lebih lama untuk memuat kode dari disk, yang berpotensi meningkatkan waktu cold startup.
7 hingga 8.1 (API level 24 hingga 27) AOT Sebagian (Profil Dasar Pengukuran) Profil Dasar Pengukuran diinstal oleh androidx.profileinstaller saat pertama kali dijalankan, saat modul aplikasi menentukan dependensi ini. ART dapat meningkatkan hal ini lebih lanjut dengan menambahkan aturan profil tambahan selama penggunaan aplikasi dan mengompilasinya saat perangkat sedang tidak digunakan. Tindakan ini mengoptimalkan ruang dan waktu disk untuk memuat kode dari disk, sehingga mengurangi waktu tunggu aplikasi.
9 (API level 28) dan yang lebih tinggi AOT Sebagian (Profil Dasar Pengukuran + Cloud) Play menggunakan Profil Dasar Pengukuran selama penginstalan aplikasi untuk mengoptimalkan APK dan profil Cloud—jika tersedia. Setelah penginstalan, profil ART akan diupload ke Play, digabungkan, lalu disediakan sebagai Profil Cloud kepada pengguna lain saat mereka menginstal atau mengupdate aplikasi.

Masalah umum

Berikut ini masalah yang mungkin terjadi dan solusinya, atau masalah yang pengembangan solusinya sedang dilakukan.

  • Pembuatan Profil Dasar Pengukuran mungkin gagal karena setelan izin di beberapa perangkat, termasuk perangkat OnePlus. Untuk mengatasi masalah ini, nonaktifkan opsi Nonaktifkan pemantauan izin di setelan Opsi Developer.

  • Pembuatan Profil Dasar Pengukuran tidak didukung di perangkat Firebase Test Lab, termasuk perangkat Test Lab yang dikelola Gradle (masalah #285187547).

  • Untuk menyediakan Profil Dasar Pengukuran untuk library dengan berhasil, gunakan plugin Gradle Profil Dasar Pengukuran 1.2.3 atau AGP 8.3, minimal (masalah #313992099).

  • Jika Anda membuat Profil Dasar Pengukuran dengan perintah ./gradlew app:generateBaselineProfile, benchmark dalam modul pengujian juga akan berjalan, dan hasilnya akan dibuang. Jika hal ini terjadi, Anda dapat membuat hanya Profil Dasar Pengukuran dengan menjalankan perintah dengan -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile. Masalah ini telah diperbaiki di AGP 8.2.

  • Perintah untuk membuat Profil Dasar Pengukuran untuk semua jenis build— ./gradlew app:generateBaselineProfile—hanya membuat Profil Dasar Pengukuran untuk jenis build rilis. Masalah ini telah diperbaiki di AGP 8.1.

  • Saluran distribusi aplikasi non-Google Play Store mungkin tidak mendukung penggunaan Profil Dasar Pengukuran saat penginstalan. Pengguna aplikasi yang diinstal melalui saluran ini tidak akan mendapatkan manfaat hingga dexopt latar belakang dijalankan—kemungkinan dalam semalam.

  • Berbagi aplikasi internal Play Store tidak mendukung Profil Dasar Pengukuran; namun, jalur pengujian internal mendukungnya.

  • Pengoptimalan baterai di beberapa perangkat, seperti perangkat Huawei, dapat mengganggu penginstalan profil. Untuk membantu memastikan profil Anda diinstal secara efektif, nonaktifkan pengoptimalan baterai di perangkat tolok ukur Anda.

Referensi lainnya

Direkomendasikan untuk Anda