Plugin Gradle Profil Dasar Pengukuran mempermudah pembuatan dan pengelolaan Profil Dasar Pengukuran. Hal ini membantu Anda melakukan tugas-tugas berikut:
- Membuat Profil Dasar Pengukuran baru untuk aplikasi Anda.
- Membuat Profil Dasar Pengukuran baru untuk library Anda.
- Menyesuaikan pembuatan Profil Dasar Pengukuran Anda.
Halaman ini menjelaskan cara menggunakan plugin Gradle Profil Dasar Pengukuran untuk menyesuaikan pembuatan Profil Dasar Pengukuran Anda.
Persyaratan plugin
- AGP 8.0 atau yang lebih baru
- Dependensi pada versi plugin Gradle terbaru
Menggunakan Perangkat yang Dikelola Gradle untuk membuat Profil Dasar Pengukuran
Untuk menggunakan Perangkat yang Dikelola Gradle (GMD) guna
membuat Profil Dasar Pengukuran, tambahkan satu perangkat di konfigurasi build.gradle.kts
pada modul pembuat profil—kemungkinan modul pengujian :baselineprofile
—seperti
yang ditunjukkan pada contoh berikut:
Kotlin
android { testOptions.managedDevices.devices { create<com.android.build.api.dsl.ManagedVirtualDevice>("pixel6Api31") { device = "Pixel 6" apiLevel = 31 systemImageSource = "aosp" } } }
Groovy
android { testOptions.managedDevices.devices { pixel6Api31(ManagedVirtualDevice) { device 'Pixel 6' apiLevel = 31 systemImageSource 'aosp' } } }
Menggunakan GMD untuk membuat Profil Dasar Pengukuran dengan menambahkannya ke Profil Dasar Pengukuran
Konfigurasi plugin Gradle sebagai berikut, dalam build.gradle.kts
Modul pengujian :baselineprofile
:
Kotlin
baselineProfile { managedDevices += "pixel6Api31" }
Groovy
baselineProfile { managedDevices = ['pixel6Api31'] }
Saat Anda menggunakan GMD untuk membuat Profil Dasar Pengukuran, tetapkan useConnectedDevices
ke
false
, dalam modul pengujian :baselineprofile
Anda:
Kotlin
baselineProfile { ... useConnectedDevices = false }
Groovy
baselineProfile { ... useConnectedDevices false }
Membuat Profil Dasar Pengukuran untuk varian yang berbeda
Anda dapat membuat Profil Dasar Pengukuran per varian, per ragam, atau sebagai file tunggal
untuk digunakan bagi semua varian. Kontrol perilaku ini melalui setelan penggabungan, sebagai
yang ditunjukkan dalam contoh berikut, dalam build.gradle.kts
dari
aplikasi atau modul library.
Kotlin
baselineProfile { mergeIntoMain = true }
Groovy
baselineProfile { mergeIntoMain true }
Untuk menggabungkan profil yang dibuat bagi semua varian menjadi satu profil, tetapkan
mergeIntoMain
ke true
. Anda tidak dapat membuat Profil Dasar Pengukuran
per varian jika setelan ini adalah true
, jadi ada satu tugas Gradle yang disebut
generateBaselineProfile
. Output profil ada di
src/main/generated/baselineProfiles
.
Untuk menonaktifkan penggabungan dan memiliki satu profil per varian, tetapkan mergeIntoMain
ke
false
. Dalam hal ini, ada beberapa tugas Gradle khusus varian. Misalnya,
jika ada dua ragam—seperti gratis dan berbayar—dan satu
jenis build rilis, tugasnya adalah sebagai berikut:
* `generateFreeReleaseBaselineProfile`
* `generatePaidReleaseBaselineProfile`
* `generateReleaseBaselineProfile`
Untuk menentukan perilaku penggabungan per varian, gunakan kode berikut:
Kotlin
baselineProfile { variants { freeRelease { mergeIntoMain = true } } }
Groovy
baselineProfile { variants { freeRelease { mergeIntoMain true } } }
Dalam contoh sebelumnya, varian yang menetapkan tanda ke true
semuanya
digabungkan ke dalam src/main/generated/baselineProfiles
, sedangkan profil untuk
varian yang tandanya ditetapkan ke false
akan disimpan di folder
src/<variant>/generated/baselineProfiles
.
Secara default, mergeIntoMain
ditetapkan ke true
untuk library dan false
untuk aplikasi.
Membuat Profil Dasar Pengukuran secara otomatis saat menyusun rilis baru
Anda dapat mengonfigurasi Profil Dasar Pengukuran untuk secara otomatis membuat dengan setiap build
rilis, bukan menggunakan tugas generateBaselineProfile
secara manual. Dengan
pembuatan otomatis, profil terbaru akan disertakan dalam build rilis.
Guna mengaktifkan pembuatan otomatis untuk build rilis, gunakan
tanda automaticGenerationDuringBuild
:
Kotlin
baselineProfile { automaticGenerationDuringBuild = true }
Groovy
baselineProfile { automaticGenerationDuringBuild true }
Menyetel tanda automaticGenerationDuringBuild
ke true
akan memicu
pembuatan Profil Dasar Pengukuran baru untuk setiap assembly rilis. Artinya,
menjalankan susunan tugas build rilis, seperti ./gradlew:app:assembleRelease
,
juga akan memicu :app:generateReleaseBaselineProfile
, memulai uji instrumentasi
Profil Dasar Pengukuran, dan membangun build yang menjalankan Profil Dasar Pengukuran.
Meskipun pembuatan otomatis membantu pengguna mendapatkan manfaat performa terbaik, hal ini
juga meningkatkan waktu build karena pengujian build ganda dan uji
instrumentasi.
Anda juga dapat menentukan perilaku ini per varian, seperti yang ditunjukkan pada contoh berikut:
Kotlin
baselineProfile { variants { freeRelease { automaticGenerationDuringBuild = true } } }
Groovy
baselineProfile { variants { freeRelease { automaticGenerationDuringBuild true } } }
Pada contoh sebelumnya, tugas generateFreeReleaseBaselineProfile
berjalan
saat memulai assembleFreeRelease
. Hal ini membantu saat pengguna ingin memiliki, misalnya, release
untuk build distribusi yang selalu menghasilkan profil saat membangun, dan build releaseWithoutProfile
untuk pengujian internal.
Menyimpan Profil Dasar Pengukuran ke dalam sumber
Anda dapat menyimpan Profil Dasar Pengukuran di direktori sumber melalui saveInSrc
di build.gradle.kts
aplikasi atau modul library:
true
: Profil Dasar Pengukuran disimpan disrc/<variant>/generated/baselineProfiles
. Hal ini memungkinkan Anda meng-commit profil yang dihasilkan terbaru dengan sumber Anda.false
: Profil Dasar Pengukuran disimpan dalam file perantara dalam direktori build. Dengan demikian, saat menyimpan kode, Anda tidak menyimpan profil yang dihasilkan terbaru.
Kotlin
baselineProfile { saveInSrc = true }
Groovy
baselineProfile { saveInSrc true }
Anda juga dapat menentukan perilaku ini per varian:
Kotlin
baselineProfile { variants { freeRelease { saveInSrc = true } } }
Groovy
baselineProfile { variants { freeRelease { saveInSrc true } } }
Memfilter aturan profil
Plugin Gradle Profil Dasar Pengukuran memungkinkan Anda memfilter aturan Profil Dasar Pengukuran yang dibuat. Hal ini sangat berguna bagi library jika Anda ingin mengecualikan aturan profil untuk class dan metode yang merupakan bagian dari dependensi aplikasi contoh atau library itu sendiri. Filter dapat menyertakan dan mengecualikan paket dan class tertentu. Jika Anda hanya menentukan pengecualian, hanya aturan Profil Dasar Pengukuran yang cocok yang akan dikecualikan, dan yang lainnya disertakan.
Spesifikasi filter dapat berupa salah satu dari hal berikut:
- Nama paket yang diakhiri dengan karakter pengganti ganda agar cocok dengan paket yang ditentukan dan
semua sub-paket. Misalnya,
com.example.**
cocok dengancom.example.method
dancom.example.method.bar
. - Nama paket yang diakhiri dengan karakter pengganti agar hanya cocok dengan paket yang ditentukan. Misalnya,
com.example.*
cocok dengancom.example.method
, tetapi tidak cocok dengancom.example.method.bar
. - Nama class agar cocok dengan class tertentu, misalnya
com.example.MyClass
.
Contoh berikut menunjukkan cara menyertakan dan mengecualikan paket tertentu:
Kotlin
baselineProfile { filter { include("com.somelibrary.widget.grid.**") exclude("com.somelibrary.widget.grid.debug.**") include("com.somelibrary.widget.list.**") exclude("com.somelibrary.widget.list.debug.**") include("com.somelibrary.widget.text.**") exclude("com.somelibrary.widget.text.debug.**") } }
Groovy
baselineProfile { filter { include 'com.somelibrary.widget.grid.**' exclude 'com.somelibrary.widget.grid.debug.**' include 'com.somelibrary.widget.list.**' exclude 'com.somelibrary.widget.list.debug.**' include 'com.somelibrary.widget.text.**' exclude 'com.somelibrary.widget.text.debug.**' } }
Menyesuaikan aturan filter untuk varian yang berbeda sebagai berikut:
Kotlin
// Non-specific filters applied to all the variants. baselineProfile { filter { include("com.myapp.**") } } // Flavor-specific filters. baselineProfile { variants { free { filter { include("com.myapp.free.**") } } paid { filter { include("com.myapp.paid.**") } } } } // Build-type-specific filters. baselineProfile { variants { release { filter { include("com.myapp.**") } } } } // Variant-specific filters. baselineProfile { variants { freeRelease { filter { include("com.myapp.**") } } } }
Groovy
// Non-specific filters applied to all the variants. baselineProfile { filter { include 'com.myapp.**' } } // Flavor-specific filters. baselineProfile { variants { free { filter { include 'com.myapp.free.**' } } paid { filter { include 'com.myapp.paid.**' } } } } // Build-type specific filters. baselineProfile { variants { release { filter { include 'com.myapp.**' } } } } // Variant-specific filters. baselineProfile { variants { freeRelease { filter { include 'com.myapp.**' } } } }
Anda juga dapat memfilter aturan menggunakanfilterPredicate
argumen di BaselineProfileRule.collect()
, tetapi sebaiknya gunakan plugin
Gradle untuk memfilter karena menyediakan cara yang lebih sederhana untuk memfilter sub-paket dan
satu tempat untuk mengonfigurasi seluruh modul.
Menyesuaikan jenis build benchmark dan Profil Dasar Pengukuran
Plugin Gradle Profil Dasar Pengukuran membuat jenis build tambahan untuk dibuat
profil dan menjalankan benchmark. Jenis build ini diawali dengan
benchmark
dan nonMinified
. Misalnya, untuk jenis build release
, plugin
akan membuat jenis build benchmarkRelease
dan nonMinifiedRelease
.
Jenis build ini secara otomatis dikonfigurasi
untuk kasus penggunaan tertentu dan
umumnya tidak memerlukan
penyesuaian. Tetapi ada beberapa
kasus di mana ia
mungkin masih berguna untuk menerapkan beberapa opsi kustom, misalnya untuk menerapkan
konfigurasi penandatanganan yang berbeda.
Anda dapat menyesuaikan jenis build yang dibuat secara otomatis menggunakan subset properti jenis build; properti yang tidak dapat digunakan akan diganti. Contoh berikut menunjukkan cara menyesuaikan jenis build tambahan dan properti mana yang diganti:
Kotlin
android { buildTypes { release { ... } create("benchmarkRelease") { // Customize properties for the `benchmarkRelease` build type here. // For example, you can change the signing config (by default // it's the same as for the `release` build type). signingConfig = signingConfigs.getByName("benchmarkRelease") } create("nonMinifiedRelease") { // Customize properties for the `nonMinifiedRelease` build type here. signingConfig = signingConfigs.getByName("nonMinifiedRelease") // From Baseline Profile Gradle plugin 1.2.4 and higher, you can't // customize the following properties, which are always overridden to // avoid breaking Baseline Profile generation: // // isJniDebuggable = false // isDebuggable = false // isMinifyEnabled = false // isShrinkResources = false // isProfileable = true // enableAndroidTestCoverage = false // enableUnitTestCoverage = false } } }
Groovy
android { buildTypes { release { ... } benchmarkRelease { // Customize properties for the `benchmarkRelease` build type here. // For example, you can change the signing config (by default it's the // same as for the `release` build type.) signingConfig = signingConfigs.benchmarkRelease } nonMinifiedRelease { // Customize properties for the `nonMinifiedRelease` build type here. signingConfig = signingConfigs.nonMinifiedRelease // From Baseline Profile Gradle plugin 1.2.4 and higher, you can't use // the following properties, which are always overridden to avoid breaking // Baseline Profile generation: // // isJniDebuggable = false // isDebuggable = false // isMinifyEnabled = false // isShrinkResources = false // isProfileable = true // enableAndroidTestCoverage = false // enableUnitTestCoverage = false } } }
Catatan tambahan
Saat membuat Profil Dasar Pengukuran, ada beberapa hal tambahan yang perlu diketahui:
Profil Dasar Pengukuran yang Dikompilasi harus berukuran lebih kecil dari 1,5 MB. Hal ini tidak berlaku untuk format teks di file sumber Anda, yang biasanya jauh lebih besar sebelum kompilasi. Anda dapat memverifikasi ukuran Profil Dasar Pengukuran biner dengan menemukannya di artefak output di bagian
assets/dexopt/baseline.prof
untuk APK atauBUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof
untuk AAB.Aturan luas yang mengompilasi terlalu banyak aplikasi dapat memperlambat startup karena peningkatan akses disk. Jika Anda baru saja menggunakan Profil Dasar Pengukuran, jangan khawatir. Namun, bergantung pada aplikasi dan ukuran serta jumlah perjalanan, menambahkan banyak perjalanan dapat menghasilkan performa yang kurang optimal. Uji performa aplikasi Anda dengan mencoba berbagai profil dan memverifikasi bahwa performa tidak regresi setelah penambahan.