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' } } }
Gunakan GMD untuk membuat Profil Dasar Pengukuran dengan menambahkannya ke konfigurasi plugin Gradle
Profil Dasar Pengukuran sebagai berikut, di build.gradle.kts
dari
modul pengujian :baselineprofile
:
Kotlin
baselineProfile { managedDevices += "pixel6Api31" }
Groovy
baselineProfile { managedDevices = ['pixel6Api31'] }
Saat Anda menggunakan GMD untuk membuat Profil Dasar Pengukuran, tetapkan useConnectedDevices
ke
false
, di modul pengujian :baselineprofile
:
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, seperti
yang ditunjukkan dalam contoh berikut, di build.gradle.kts
modul aplikasi atau 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 flag
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 } } }
Menonaktifkan peringatan
Secara default, Plugin Gradle Profil Dasar Pengukuran memperingatkan Anda tentang situasi yang
mungkin menyebabkan masalah. Untuk menonaktifkan peringatan, Anda dapat menetapkan opsi yang relevan ke
false
dalam file build.gradle.kts
. Berikut adalah opsi peringatan:
baselineProfile {
warnings {
/**
* Warn when the Android Gradle Plugin version is higher than the max
* tested one.
*/
maxAgpVersion = true
/**
* Warn when a benchmark or baseline profile variant has been disabled.
*/
disabledVariants = true
/**
* Warn that running `generateBaselineProfile` with AGP 8.0 doesn't
* support running instrumentation tests for multiple build types at
* once.
*/
multipleBuildTypesWithAgp80 = true
/**
* Warn when no baseline profiles are generated after running the
* generate baseline profile command.
*/
noBaselineProfileRulesGenerated = true
/**
* Warn when no startup profiles are generated after running the generate
* baseline profile command.
*/
noStartupProfileRulesGenerated = 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 menggunakan argumen filterPredicate
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 membuat
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 dikonfigurasi secara otomatis untuk kasus penggunaan tertentu dan
umumnya tidak memerlukan penyesuaian apa pun. Namun, ada beberapa kasus yang
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 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.