Temel Profiller Oluşturma
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Temel profiller, Jetpack Compose performansını en üst düzeye çıkarmak için gereklidir.
Önemli kullanıcı yolculuklarınızı önceden derlemek, Compose kullanıcı arayüzünüzün sorunsuz şekilde oluşturulmasını sağlar.
Jetpack
Macrobenchmark kitaplığını ve BaselineProfileRule kullanarak her uygulama sürümü için otomatik olarak profiller oluşturun. Temel Profil kullanırken derleme iyileştirmelerinden yararlanmak için com.android.tools.build:gradle:8.0.0 veya daha yüksek bir sürüm kullanmanızı öneririz.
Yeni bir temel profil oluşturmak için genel adımlar şunlardır:
Temel Profil modülünü ayarlayın.
Temel profiller oluşturmaya yardımcı olan JUnit testini tanımlayın.
Optimize etmek istediğiniz kritik kullanıcı yolculuklarını (CUJ'ler) ekleyin.
Temel profili oluşturun.
Temel profil oluşturduktan sonra, hız iyileştirmelerini ölçmek için fiziksel bir cihaz kullanarak profili karşılaştırın.
AGP 8.2 veya sonraki bir sürümle yeni bir temel profil oluşturma
Yeni bir temel profil oluşturmanın en kolay yolu, Android Studio Iguana ve Android Gradle Plugin (AGP) 8.2'den itibaren kullanılabilen temel profil modülü şablonunu kullanmaktır.
Android Studio Baseline Profile Generator modül şablonu, Baseline Profilleri oluşturmak ve karşılaştırmak için yeni bir modül oluşturma işlemini otomatikleştirir. Şablonu çalıştırmak, tipik derleme yapılandırmasının, temel profil oluşturmanın ve doğrulama kodunun büyük bir kısmını oluşturur. Şablon, uygulama başlatmayı ölçmek için temel profiller oluşturup karşılaştırma testi yapacak kod oluşturur.
Baseline Profile modülünü ayarlama
Temel 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 Baseline Profile Generator şablonunu seçip yapılandırın:
Şekil 1. Temel Profil Oluşturucu modül şablonu.
Şablondaki alanlar şunlardır:
Hedef uygulama: Temel Profil'in oluşturulduğu uygulama. 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ünün adıdır.
Paket adı: Temel Profil modülü için istediğiniz paket adı.
Dil: Oluşturulan kodun Kotlin veya Java olmasını isteyip istemediğiniz.
Derleme yapılandırma dili: Derleme yapılandırma komut dosyalarınız için Kotlin Script (KTS) veya Groovy'yi kullanmak isteyip istemediğiniz.
Bitir'i tıkladığınızda yeni modül oluşturulur. Kaynak kontrolü kullanıyorsanız yeni oluşturulan modül dosyalarını kaynak kontrolüne eklemeniz istenebilir.
Temel profil oluşturucuyu tanımlama
Yeni oluşturulan modül, hem temel profili oluşturmak hem de karşılaştırmak için testler içerir ve yalnızca temel uygulama başlatma test edilir. Bu iş akışlarını, kritik kullanıcı yolculuklarını ve gelişmiş başlangıç iş akışlarını içerecek şekilde genişletmenizi öneririz. Uygulama başlatmayla ilgili tüm testlerin rule bloğunda includeInStartupProfile değerinin true olarak ayarlandığından emin olun. Bununla birlikte, optimum performans için uygulama başlatmayla ilgili olmayan testlerin Başlangıç Profiline dahil edilmediğinden emin olun. Uygulama başlatma
optimizasyonları, Temel Profil'in Başlatma Profili adlı ö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 kodu dışında soyutlayarak her ikisi için de kullanılabilir hale getirirseniz sürdürülebilirliği koruyabilirsiniz. Bu, CUJ'lerinizdeki değişikliklerin tutarlı bir şekilde kullanıldığı anlamına gelir.
Temel profil oluşturma ve yükleme
Temel Profil modülü şablonu, Temel Profil oluşturmak için yeni bir çalıştırma yapılandırması ekler. Ürün çeşitlerini kullanıyorsanız Android Studio, her çeşit için ayrı temel profiller oluşturabilmeniz amacıyla birden fazla çalıştırma yapılandırması oluşturur.
Şekil 2. Bu yapılandırmanın çalıştırılması, Baseline Profile'ı oluşturur.
Generate Baseline Profile (Temel Profil Oluştur) çalıştırma yapılandırması tamamlandığında, oluşturulan temel profili, profili oluşturulan modüldeki src/variant/generated/baselineProfiles/baseline-prof.txt
dosyasına kopyalar. Varyant seçenekleri, yayınlanan derleme türü veya yayınlanan derleme türünü içeren bir derleme değişkenidir.
Oluşturulan temel profil aslen build/outputs içinde oluşturulur. Tam yol, profili oluşturulan uygulamanın varyantına veya sürümüne ve profili oluşturma için Gradle tarafından yönetilen bir cihaz mı yoksa bağlı bir cihaz mı kullandığınıza göre belirlenir. Şablon tarafından oluşturulan kod ve derleme yapılandırmaları tarafından kullanılan adları kullanırsanız temel profil, build/outputs/managed_device_android_test_additional_output/nonminifiedrelease/pixel6Api31/BaselineProfileGenerator_generate-baseline-prof.txt dosyasında oluşturulur. Oluşturulan temel profilin bu sürümünü hedef modüllere manuel olarak kopyalamadığınız sürece (önerilmez) doğrudan kullanmanız gerekmeyebilir.
AGP 8.1 ile yeni bir Baseline Profile oluşturma
Baseline Profile modülü şablonunu kullanamıyorsanız yeni bir Baseline Profile oluşturmak için Macrobenchmark modülü şablonunu ve Baseline Profile Gradle eklentisini kullanın. Bu araçları Android Studio Giraffe ve AGP 8.1'den itibaren 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:
Oluşturucu, uygulamanızla etkileşimleri uygulama başlatma işleminin ötesine taşıyabilir.
Bu sayede uygulamanızın çalışma zamanı performansını (ör. listelerde gezinme, animasyon çalıştırma ve Activity içinde gezinme) optimize edebilirsiniz.
@BaselineProfileRule kullanarak kritik kullanıcı yolculuklarını iyileştiren testlerle ilgili diğer örneklere göz atın.
Baseline Profile Gradle eklentisini ekleyin
(libs.plugins.androidx.baselineprofile). Bu eklenti, Baseline Profilleri oluşturmayı ve gelecekte bunları korumayı 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, root erişimi olan fiziksel bir cihazda, emülatörde veya Gradle tarafından yönetilen cihazda enstrümanlı test olarak çalıştırın. Gradle tarafından yönetilen bir cihaz kullanıyorsanız aosp değerini systemImageSource olarak ayarlayın. Çünkü Baseline Profile oluşturucu için kök erişimi gerekir.
Üretim görevinin sonunda, Baseline Profili app/src//generated/baselineProfiles konumuna kopyalanır.
İsteğe bağlı olarak Gradle tarafından yönetilen bir cihaz (GMD) ekleyin. Aşağıdaki örnekte pixel6Api31. Belirtilmezse eklenti, bağlı bir cihaz (emüle edilmiş veya fiziksel) 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=31systemImageSource="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}
Modern
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'apiLevel31systemImageSource'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.useConnectedDevicesfalse}
:baseline-profile test modülünde bir Baseline Profile testi oluşturun. Aşağıdaki örnek, uygulama başlatma için temel profil oluşturan bir testtir.
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"))}
Modern
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.
Üretim görevinin sonunda, Baseline Profili app/src/variant/generated/baselineProfiles konumuna kopyalanır.
Temel Profili Karşılaştırma
Temel profilinizi karşılaştırmak için StartupBenchmarks.kt dosyasında tanımlanan karşılaştırmaları yürüten oluk işleminden yeni bir Android enstrümanlı 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ığı ile karşılaştırma temel profilleri başlıklı makaleleri inceleyin.
Bu kodu Android Studio'da çalıştırdığınızda derleme çıktısı, Baseline Profile'ın sağladığı hız iyileştirmeleriyle ilgili ayrıntıları 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:
Tam gösterime kalan süre (TTFD): TTID'ye ilk çerçeve gösterildikten sonra eşzamansız olarak yüklenen içeriğin gösterilme süresi eklenir.
TTFD, reportFullyDrawn yöntemi ComponentActivity çağrıldığında bildirilir. reportFullyDrawn hiçbir zaman çağrılmazsa bunun yerine TTID raporlanır. Asenkron yükleme tamamlanana kadar reportFullyDrawn işlevinin çağrılmasını geciktirmeniz gerekebilir. Örneğin, kullanıcı arayüzünde dinamik bir tembel liste varsa liste, ilk kez çizildikten sonra tamamlanan bir arka plan göreviyle doldurulabilir. Bu nedenle, liste doldurulduktan sonra kullanıcı arayüzü tamamen çizilmiş olarak işaretlenir. Bu gibi durumlarda, kullanıcı arayüzü tamamen çizilmiş duruma ulaştıktan sonra çalışan kod, Temel Profil'e dahil edilmez.
Liste popülasyonunu temel profilinize dahil etmek için getFullyDrawnReporter kullanarak FullyDrawnReporter değerini alın ve uygulama kodunuzda buna bir muhabir ekleyin. Arka plan görevi, listeyi doldurmayı bitirdikten sonra muhabiri serbest bırakın. FullyDrawnReporter, tüm raporlayıcılar serbest bırakılana kadar reportFullyDrawn yöntemini çağırmaz. Bunu yaptığınızda, temel profil listeyi doldurmak için gereken kod yollarını içerir. Bu değişiklik, uygulamanın kullanıcı açısından davranışını değiştirmez ancak Temel Profil'in gerekli tüm kod yollarını içermesine olanak tanır.
Tamamen çizilmiş durumu belirtmek için aşağıdaki Compose API'lerini kullanın:
ReportDrawn, composable'ınızın hemen etkileşime hazır olduğunu gösterir.
ReportDrawnWhen, composable'ınızın etkileşime hazır olduğunu belirtmek için list.count > 0 gibi bir yüklem alır.
ReportDrawnAfter, tamamlandığında composable'ınızın etkileşime hazır olduğunu belirten bir askıya alma yöntemi kullanır.
Sizin için önerilenler
Not: JavaScript kapalıyken bağlantı metni gösterilir.
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.