Jetpack Macrobenchmark kitaplığını ve BaselineProfileRule
kullanarak her uygulama sürümü için otomatik olarak profiller oluşturun. Temel profiller kullanılırken derleme iyileştirmeleri sunan com.android.tools.build:gradle:8.0.0
veya daha yeni bir sürümü kullanmanızı öneririz.
Yeni bir referans profili oluşturmak için genel adımlar şunlardır:
- Temel Profil modülünü ayarlayın.
- Temel Profillerin oluşturulmasına yardımcı olan JUnit testini tanımlayın.
- Optimize etmek istediğiniz kritik kullanıcı yolculuklarını (CUJ'ler) ekleyin.
- Temel profili oluşturun.
Referans profilini oluşturduktan sonra, hız iyileştirmelerini ölçmek için fiziksel bir cihaz kullanarak karşılaştırma yapın.
AGP 8.2 veya sonraki bir sürümle yeni bir referans profili oluşturma
Yeni bir Temel Profil oluşturmanın en kolay yolu, Android Studio Iguana ve Android Gradle Eklentisi (AGP) 8.2 sürümünden itibaren kullanıma sunulan Temel Profil modülü şablonunu kullanmaktır.
Android Studio Baseline Profile Generator modülü şablonu, temel profil oluşturmak ve karşılaştırmak için yeni bir modülün oluşturulmasını otomatikleştirir. Şablon çalıştırıldığında, tipik derleme yapılandırmasının, temel profil oluşturmanın ve doğrulama kodunun çoğu oluşturulur. Şablon, uygulamanın başlatılmasını ölçmek için referans profilleri oluşturmak ve karşılaştırmak üzere kod oluşturur.
Temel Profil modülünü ayarlama
Referans Profil modülü şablonunu çalıştırmak için aşağıdaki adımları uygulayın:
- Dosya > Yeni > Yeni Modül'ü seçin.
- Şablonlar panelinde Temel Profil Oluşturucu şablonunu seçin ve yapılandırın:
Şablondaki alanlar şunlardır:
- Hedef uygulama: Temel profilin hangi uygulama için oluşturulduğunu tanımlar. Projenizde yalnızca tek bir uygulama modülü varsa bu listede yalnızca bir öğe bulunur.
- Modül adı: Oluşturulan Temel Profil modülü için istediğiniz ad.
- Paket adı: Temel Profil modülü için istediğiniz paket adı.
- Dil: Oluşturulan kodun Kotlin mi yoksa Java mı olmasını istediğinizi belirtir.
- Yapılandırma dili derleme: Derleme yapılandırma komut dosyalarınız için Kotlin Komut Dosyası (KTS) veya Groovy kullanmak isteyip istemediğinizi belirtin.
- Gradle tarafından yönetilen cihaz kullanın: Uygulamanızı test etmek için Gradle tarafından yönetilen cihazlar kullanıp kullanmadığınızı belirtir.
- Sonlandır'ı tıklayın. Yeni modül oluşturulur. Kaynak denetimi kullanıyorsanız yeni oluşturulan modül dosyalarını kaynak denetimine eklemeniz istenebilir.
Temel profil oluşturucuyu tanımlama
Yeni oluşturulan modül, hem referans profilini oluşturmak hem de karşılaştırmak hem de yalnızca temel uygulama başlangıcını test etmek için testler içerir. Bu içerikleri CUJ'ler ve gelişmiş başlangıç iş akışlarını içerecek şekilde genişletmenizi öneririz. Uygulama başlatılmasıyla ilgili testlerin, includeInStartupProfile
'un true
olarak ayarlandığı bir rule
bloğunda bulunduğundan emin olun. Buna karşılık, optimum performans için uygulama başlatılmasıyla ilgili olmayan testlerin bir Başlangıç Profili'ne dahil edilmediğinden emin olun. Uygulama başlatma optimizasyonları, referans profilin başlatma profili olarak adlandırılan özel bir bölümünü tanımlamak için kullanılır.
Bu CUJ'leri oluşturulan Temel Profil ve karşılaştırma kodunun dışında soyutlayarak her ikisinde de kullanılabilmesi için sürdürülebilirliğe yardımcı olur. Bu, CUJ'lerinizdeki değişikliklerin tutarlı bir şekilde kullanıldığı anlamına gelir.
Temel çizgi profilini oluşturma ve yükleme
Temel Profil modülü şablonu, Temel Profil'i oluşturmak için yeni bir çalıştırma yapılandırması ekler. Ürün aromaları kullanıyorsanız Android Studio, her aroma için ayrı temel profiller oluşturabilmeniz amacıyla birden fazla çalıştırma yapılandırması oluşturur.
Referans Profili Oluştur çalıştırma yapılandırması tamamlandığında, oluşturulan referans profili, profil oluşturulan modüldeki src/variant/generated/baselineProfiles/baseline-prof.txt
dosyasına kopyalanır. Varyant seçenekleri, sürüm derleme türü veya sürüm derleme türünü içeren bir derleme varyantıdır.
Oluşturulan Temel Profil, ilk olarak build/outputs
ürününde oluşturulmuştur. Tam yol, profil oluşturulan uygulamanın varyantına veya çeşidine ve profil oluşturmak için Gradle tarafından yönetilen bir cihaz mı yoksa bağlı bir cihaz mı kullandığınıza bağlıdır. Kod tarafından kullanılan adları ve şablon tarafından oluşturulan derleme yapılandırmalarını kullanırsanız referans profili build/outputs/managed_device_android_test_additional_output/nonminifiedrelease/pixel6Api31/BaselineProfileGenerator_generate-baseline-prof.txt
dosyasında oluşturulur. Oluşturulan referans profilinin bu sürümüyle doğrudan etkileşime geçmeniz gerekmez. Bunun için hedef modüllere manuel olarak kopyalamanız gerekir (önerilmez).
AGP 8.1 ile yeni bir temel profil oluşturma
Temel Profil modülü şablonunu kullanamıyorsanız yeni bir Temel Profil oluşturmak için Macrobenchmark modül şablonunu ve Baseline Profile Gradle eklentisini kullanın. Android Studio Giraffe ve AGP 8.1'den başlayarak bu araçları kullanmanızı öneririz.
Macrobenchmark modülü şablonunu ve Baseline Profile Gradle eklentisini kullanarak yeni bir temel profil oluşturmak için aşağıdaki adımları uygulayın:
- Gradle projenizde bir Macrobenchmark modülü oluşturun.
BaselineProfileGenerator
adlı yeni bir sınıf tanımlayın:class BaselineProfileGenerator { @get:Rule val baselineProfileRule = BaselineProfileRule() @Test fun startup() = baselineProfileRule.collect( packageName = "com.example.app", profileBlock = { startActivityAndWait() } ) }
Oluşturma aracı, uygulama başlatma işleminin ötesinde uygulamanızla ilgili etkileşimleri içerebilir. Bu sayede uygulamanızın çalışma zamanı performansını (ör. listeleri kaydırma, animasyon çalıştırma ve bir
Activity
içinde gezinme) optimize edebilirsiniz. Kritik kullanıcı yolculuklarını iyileştirmek için@BaselineProfileRule
kullanan testlerin diğer örneklerini inceleyin.Temel Profil Gradle eklentisini (
libs.plugins.androidx.baselineprofile
) ekleyin. Bu eklenti, temel profil oluşturmayı ve gelecekte bu profilleri yönetmeyi kolaylaştırır.Temel profil oluşturmak için terminalde
:app:generateBaselineProfile
veya:app:generateVariantBaselineProfile
Gradle görevlerini çalıştırın.Oluşturucuyu rootlanmış bir fiziksel cihazda, emülatörde veya Gradle Yönetilen Cihazda aletli test olarak çalıştırın. Gradle Managed Device kullanıyorsanız Temel Profil Oluşturucu için kök erişimine ihtiyacınız olduğundan
aosp
değerinisystemImageSource
olarak ayarlayın.Oluşturma görevinin sonunda, referans profil
app/src/variant/generated/baselineProfiles
alanına kopyalanır.
Şablon olmadan yeni bir temel profil oluşturma
Android Studio Referans Profil modülü şablonunu (tercih edilir) veya Makro Karşılaştırma şablonunu kullanarak bir Referans Profil oluşturmanızı öneririz. Ancak Referans Profil Gradle eklentisini tek başına da kullanabilirsiniz. Temel Profil Gradle eklentisi hakkında daha fazla bilgi edinmek için Temel Profil oluşturma işlemini yapılandırma başlıklı makaleyi inceleyin.
Temel Profil Gradle eklentisini doğrudan kullanarak Temel Profil oluşturmak için aşağıdaki adımları uygulayın:
- Yeni bir
com.android.test
modülü oluşturun (ör.:baseline-profile
). :baseline-profile
içinbuild.gradle.kts
dosyasını yapılandırın:androidx.baselineprofile
eklentisini uygulayın.targetProjectPath
değerinin:app
modülüne işaret ettiğinden emin olun.- İsteğe bağlı olarak Gradle tarafından yönetilen cihaz (GMD) ekleyin.
Aşağıdaki örnekte
pixel6Api31
olarak gösterilmiştir. Belirtilmezse eklenti, emülasyonlu veya fiziksel olarak bağlı bir cihaz kullanır. - Aşağıdaki örnekte gösterildiği gibi istediğiniz yapılandırmayı uygulayın.
Kotlin
plugins { id("com.android.test") id("androidx.baselineprofile") } android { defaultConfig { ... } // Point to the app module, the module that you're generating the Baseline Profile for. targetProjectPath = ":app" // Configure a GMD (optional). testOptions.managedDevices.devices { pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) { device = "Pixel 6" apiLevel = 31 systemImageSource = "aosp" } } } dependencies { ... } // Baseline Profile Gradle plugin configuration. Everything is optional. This // example uses the GMD added earlier and disables connected devices. baselineProfile { // Specifies the GMDs to run the tests on. The default is none. managedDevices += "pixel6Api31" // Enables using connected devices to generate profiles. The default is // `true`. When using connected devices, they must be rooted or API 33 and // higher. useConnectedDevices = false }
Groovy
plugins { id 'com.android.test' id 'androidx.baselineprofile' } android { defaultConfig { ... } // Point to the app module, the module that you're generating the Baseline Profile for. targetProjectPath ':app' // Configure a GMD (optional). testOptions.managedDevices.devices { pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) { device 'Pixel 6' apiLevel 31 systemImageSource 'aosp' } } } dependencies { ... } // Baseline Profile Gradle plugin configuration. Everything is optional. This // example uses the GMD added earlier and disables connected devices. baselineProfile { // Specifies the GMDs to run the tests on. The default is none. managedDevices ['pixel6Api31'] // Enables using connected devices to generate profiles. The default is // `true`. When using connected devices, they must be rooted or API 33 and // higher. useConnectedDevices false }
:baseline-profile
test modülünde bir Temel Profil testi oluşturun. Aşağıdaki örnek, uygulamayı başlatıp boşta bekleyen bir testtir.Kotlin
class BaselineProfileGenerator { @get:Rule val baselineRule = BaselineProfileRule() @Test fun startupBaselineProfile() { baselineRule.collect("com.myapp") { startActivityAndWait() } } }
Java
public class BaselineProfileGenerator { @Rule Public BaselineProfileRule baselineRule = new BaselineProfileRule(); @Test Public void startupBaselineProfile() { baselineRule.collect( "com.myapp", (scope -> { scope.startActivityAndWait(); Return Unit.INSTANCE; }) ) } }
Uygulama modülündeki
build.gradle.kts
dosyasını (ör.:app
) güncelleyin.androidx.baselineprofile
eklentisini uygulayın.:baseline-profile
modülünebaselineProfile
bağımlılık ekleyin.
Kotlin
plugins { id("com.android.application") id("androidx.baselineprofile") } android { // There are no changes to the `android` block. ... } dependencies { ... // Add a `baselineProfile` dependency on the `:baseline-profile` module. baselineProfile(project(":baseline-profile")) }
Groovy
plugins { id 'com.android.application' id 'androidx.baselineprofile' } android { // No changes to the `android` block. ... } dependencies { ... // Add a `baselineProfile` dependency on the `:baseline-profile` module. baselineProfile ':baseline-profile' }
:app:generateBaselineProfile
veya:app:generateVariantBaselineProfile
Gradle görevlerini çalıştırarak profili oluşturun.Oluşturma görevinin sonunda, referans profil
app/src/variant/generated/baselineProfiles
alanına kopyalanır.
AGP 7.3-7.4 ile yeni bir Temel Profil oluşturma
AGP 7.3-7.4 ile Temel Profilleri oluşturmak mümkündür ancak Baseline Profile Gradle eklentisini ve en yeni özelliklerini kullanabilmek için en az AGP 8.1 sürümüne geçmenizi önemle tavsiye ederiz.
AGP 7.3-7.4 ile temel profiller oluşturmanız gerekiyorsa aşağıdaki istisnalar dışında AGP 8.1 için adımlar ile aynı adımları uygulayın:
- Baseline Profile Gradle eklentisini eklemeyin.
- Referans profilleri oluşturmak için Gradle
./gradlew [emulator name][flavor][build type]AndroidTest
görevini yürütün. Örneğin,./gradlew :benchmark:pixel6Api31BenchmarkAndroidTest
. - Oluşturulan temel profil kurallarını kodunuza manuel olarak uygulamanız gerekir.
Oluşturulan kuralları manuel olarak uygulama
Temel Profil Oluşturucu, cihazda Kullanıcı Tarafından Okunabilir Biçim (HRF) metin dosyası oluşturur ve bu dosyayı ana makinenize kopyalar. Oluşturulan profili kodunuza uygulamak için aşağıdaki adımları uygulayın:
HRF dosyasını, profili oluşturduğunuz modülün derleme klasöründe bulun:
[module]/build/outputs/managed_device_android_test_additional_output/[device]
.Profiller,
[class name]-[test method name]-baseline-prof.txt
adlandırma kalıbına uyar. Bu kalıp şu şekildedir:BaselineProfileGenerator-startup-baseline-prof.txt
.Oluşturulan profili
src/main/
klasörüne kopyalayın ve dosyayıbaseline-prof.txt
olarak yeniden adlandırın.Cloud Profilleri'nin kullanılamadığı durumlarda yerel Temel Profil derlemesini etkinleştirmek için uygulamanızın
build.gradle.kts
dosyasına ProfileInstaller kitaplığına bağımlılık ekleyin. Temel profili yerel olarak yüklemenin tek yolu budur.dependencies { implementation("androidx.profileinstaller:profileinstaller:1.4.1") }
Uygulanan HRF kuralları ikili biçimde derlenip APK'ya veya AAB'ye eklenirken uygulamanızın üretim sürümünü oluşturun. Ardından uygulamanızı her zamanki gibi dağıtın.
Temel Profili Karşılaştırma
Referans profilinizi karşılaştırmak için StartupBenchmarks.kt
veya StartupBencharks.java
dosyasında tanımlanan karşılaştırmaları yürüten yeni bir Android Enstrümante Test Çalıştırma yapılandırması oluşturun. Karşılaştırma testi hakkında daha fazla bilgi edinmek için Macrobenchmark sınıfı oluşturma ve Macrobenchmark kitaplığıyla ölçümü otomatikleştirme konularına bakın.
Bunu Android Studio'da çalıştırdığınızda, derleme çıkışı, Temel Profil'in sağladığı hız iyileştirmelerinin ayrıntılarını içerir:
StartupBenchmarks_startupCompilationBaselineProfiles timeToInitialDisplayMs min 161.8, median 178.9, max 194.6 StartupBenchmarks_startupCompilationNone timeToInitialDisplayMs min 184.7, median 196.9, max 202.9
Gerekli tüm kod yollarını yakalama
Uygulama başlatma sürelerini ölçmek için kullanılan iki temel metrik şunlardır:
- İlk gösterime kalan süre (TTID)
- Uygulama kullanıcı arayüzünün ilk karesinin görüntülenmesi için gereken süre.
- Tam gösterime kalan süre (TTFD)
- TTID artı ilk kare gösterildikten sonra eşzamansız olarak yüklenen içeriğin görüntülenmesi için geçen süre.
TTFD, ComponentActivity
sınıfının reportFullyDrawn()
yöntemi çağrıldıktan sonra raporlanır. reportFullyDrawn()
hiç çağrılmazsa bunun yerine TTID raporlanır. reportFullyDrawn()
çağrıldığında, eşzamansız yükleme tamamlanana kadar ertelemeniz gerekebilir. Örneğin, kullanıcı arayüzü RecyclerView
veya tembel liste gibi dinamik bir liste içeriyorsa liste, ilk çizildikten ve dolayısıyla kullanıcı arayüzü tamamen çizilmiş olarak işaretlendikten sonra tamamlanan bir arka plan görevi tarafından doldurulabilir. Bu tür durumlarda, kullanıcı arayüzü tamamen çizilmiş duruma ulaştıktan sonra çalışan kod, referans profiline dahil edilmez.
Liste popülasyonunu temel profilinizin bir parçası olarak dahil etmek için getFullyDrawnReporter()
kullanarak FullyDrawnReporter
'ü alın ve uygulama kodunuza bir raporlayıcı ekleyin. Arka plan görevi listenin doldurulması tamamlandığında
raporcuyu bırakın. FullyDrawnReporter
, tüm raporlayanlar serbest bırakılana kadar reportFullyDrawn()
yöntemini çağırmaz. Bu sayede, referans profili listeyi doldurmak için gereken kod yollarını içerir.
Bu işlem, uygulamanın kullanıcıya yönelik davranışını değiştirmez ancak temel profilin gerekli tüm kod yollarını içermesine olanak tanır.
Uygulamanız Jetpack Compose kullanıyorsa tamamen çizilmiş durumu belirtmek için aşağıdaki API'leri kullanın:
ReportDrawn
, bileşiminizin hemen etkileşime hazır olduğunu gösterir.ReportDrawnWhen
, bileşeninizin etkileşime hazır olduğunu belirtmek içinlist.count > 0
gibi bir önerme alır.ReportDrawnAfter
, tamamlandığında bileşeninizin etkileşime hazır olduğunu belirten bir askıya alma yöntemi alır.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Makro karşılaştırma metriklerini yakalama
- Macrobenchmark yazma
- JankStats kitaplığı