Jetpack'i kullanarak her uygulama sürümü için otomatik olarak profil oluşturun
Macrobenchmark kitaplığı ve
BaselineProfileRule
. Önerilerimiz:
Derlemeyle birlikte gelen com.android.tools.build:gradle:8.0.0
veya daha yüksek bir sürümü kullanın
Temel Profiller kullanılırken iyileştirmeler yapıldı.
Yeni bir temel profil oluşturmak için şu genel adımları uygulayın:
- 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.
Temel Profili oluşturduktan sonra fiziksel bir cihaz kullanarak hız artışını ölçmeyi sağlar.
AGP 8.2 veya daha yüksek bir sürümle yeni bir Temel Profil oluşturma
Yeni bir Temel Profil oluşturmanın en kolay yolu Temel Profil'i kullanmaktır. modül şablonu, Android Studio Iguana ve Android Gradle'dan itibaren kullanılabilir Eklenti (AGP) 8.2.
Android Studio Temel Profil Oluşturucu modül şablonu, oluşturmak için yeni bir modülün karşılaştırma Temel Profiller. Şablonun çalıştırılması, tipik derlemenin çoğunu oluşturur temel profil oluşturma ve doğrulama kodunu içerir. Şablon Kullanıcı, uygulamayı ölçmek için Temel Profilleri oluşturmak ve karşılaştırmak için kod oluşturur başlatma.
Temel Profil modülünü ayarlama
Temel Profil modülü şablonunu çalıştırmak için aşağıdaki adımları izleyin:
- Dosya > Yeni > Yeni Modül
- Şu gezinme panelinde Temel Profil Oluşturucu şablonunu seçin:
Şablonlar panelini açın ve yapılandırın:
Şekil 1. Temel Profil Oluşturucu modül şablonu. Şablonda bulunan alanlar şunlardır:
- Hedef uygulama: Temel Profilin hangi uygulama için oluşturulduğunu tanımlar. Projenizde tek bir uygulama modülü varsa bu listede sadece bir öğe bulunur.
- Modül adı: Temel Profil modülü için istediğiniz ad bir şablondur.
- Paket adı: Temel Profil için istediğiniz paket adı modülünü kullanabilirsiniz.
- Dil: Oluşturulan kodun Kotlin veya Java.
- Yapılandırma dili derleme: Kotlin kullanmak isteyip istemediğiniz Derleme yapılandırma komut dosyalarınız için Komut Dosyası (KTS) veya Groovy.
- Gradle tarafından yönetilen cihazı kullanma: Gradle tarafından yönetilen cihazları uygulamanızı test edin.
- Son'u tıkladığınızda yeni modül oluşturulur. Kaynak kullanıyorsanız kontrolüne sahip olduğunuzda, yeni oluşturulan modül dosyalarını ve kontrol etmesi gerekir.
Temel Profil oluşturma aracını tanımlama
Yeni oluşturulan modülde hem
Temel Profil ve yalnızca temel uygulama başlatma işlemini test edin. Hedeflerinizi ve
CUJ'leri ve gelişmiş başlatma iş akışlarını içerir. Test sırasında
uygulama başlatmayla ilgili olarak, includeInStartupProfile
grubu olan bir rule
blokta
alıcı: true
; Ancak optimum performans için, test sırasında
dahil olmayan bazı etkinlikler de dahildir. Uygulama başlatma
Temel Profilin "
Başlangıç Profili
Bu CUJ'leri oluşturulan Temel Profil ve karşılaştırma kodunu ekleyin. Bu CUJ'lerinizde yapılan değişikliklerin tutarlı olarak kullanıldığı anlamına gelir.
Temel profili oluşturma ve yükleme
Temel Profil modülü şablonu, yeni bir çalıştırma yapılandırması ekler ve Temel Profil. Ürün aromalarını kullanırsanız Android Studio ayrı Temel Profiller oluşturabilmek için birden fazla çalıştırma yapılandırmaları her bir lezzet için.
![Temel Profil Oluşturma çalıştırma yapılandırması.](https://developer.android.com/static/topic/performance/images/studio/generate-baseline-profile.png?authuser=5&hl=tr)
Temel Profil Oluştur çalıştırma yapılandırması tamamlandığında
oluşturulan Temel Profili,
src/variant/generated/baselineProfiles/baseline-prof.txt
dosyası oluşturacaktır. Varyant seçenekleri
sürüm derleme türünü veya sürüm derleme türünü içeren bir derleme varyantını seçin.
Oluşturulan Temel Profil, ilk olarak build/outputs
ürününde oluşturulmuştur. İlgili içeriği oluşturmak için kullanılan
tam yol, profili oluşturulan uygulamanın varyantı veya niteliğine göre belirlenir ve
Profil çıkarma için Gradle tarafından yönetilen bir cihaz mı yoksa bağlı bir cihaz mı kullanıyorsunuz? Eğer
kod tarafından kullanılan adları ve
Temel Profil,
build/outputs/managed_device_android_test_additional_output/nonminifiedrelease/pixel6Api31/BaselineProfileGenerator_generate-baseline-prof.txt
dosyası yükleyin. Muhtemelen her bir
oluşturulan Temel Profilin bu sürümüyle doğrudan etkileşimde bulunması gerekir
manuel olarak hedef modüllere kopyalamadığınız sürece (önerilmez).
AGP 8.1 ile yeni bir Temel Profil oluşturma
Bu Temel Profil modülü şablonu için oluşturmak için Macrobenchmark modülü şablonu ve Baseline Profile Gradle eklentisi Yeni bir Temel Profil oluşturabilirsiniz. Android'den başlayarak bu araçları kullanmanızı öneririz Studio Giraffe ve AGP 8.1.
Aşağıdaki adımları uygulayarak Macrobenchmark'ı kullanarak yeni bir temel profil oluşturabilirsiniz. modül şablonu ve Baseline Profile Gradle eklentisi:
- Grubu bir Macrobenchmark modülü oluşturabilirsiniz.
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ı optimize edebilirsiniz. Örneğin: listeleri kaydırma, animasyonları çalıştırma ve bir
Activity
Bkz. aşağıdaki testler için@BaselineProfileRule
kullanan diğer test örnekleri Kritik kullanıcı yolculuklarını iyileştirmekBaseline Profile Gradle eklentisini ekleme (
libs.plugins.androidx.baselineprofile
). Eklenti, Temel Profiller oluşturabilir ve bu profilleri gelecekte de koruyabilirsiniz.Temel Profili oluşturmak için
:app:generateBaselineProfile
veya:app:generateVariantBaselineProfile
terminal.Jeneratörü enstrümanlı test olarak çalıştırma veya bir emülatörde ya da Gradle Yönetilen Cihaz. Gradle tarafından yönetilen cihaz kullanıyorsanız root uygulamanız gerektiğinden
aosp
öğesinisystemImageSource
olarak ayarlayın Temel Profil oluşturma aracı erişimi.Oluşturma görevinin sonunda Temel Profil,
app/src/variant/generated/baselineProfiles
Şablon içermeyen yeni bir Temel Profil oluşturma
Android Studio'yu kullanarak bir Temel Profil oluşturmanızı öneririz. Temel Profil modülü şablonu (tercih edilen) veya Macrobenchmark şablonu gibidir. Baseline Profile Gradle eklentisini de kullanabilirsiniz. Şu konu hakkında daha fazla bilgi edinmek için: Baseline Profile Gradle eklentisi için bkz. Temel Profil oluşturma işleminizi yapılandırın.
Baseline Profile Gradle eklentisini kullanarak Temel Profil oluşturmak için aşağıdaki işlemleri uygulayın doğrudan:
- Yeni bir
com.android.test
modülü oluşturun. Örneğin,:baseline-profile
. build.gradle.kts
dosyasını şunun için yapılandırın::baseline-profile
:androidx.baselineprofile
eklentisini uygulayın.targetProjectPath
değerinin:app
modülü.- İsteğe bağlı olarak,
Gradle tarafından yönetilen cihaz (GMD).
Aşağıdaki örnekte, özelliğin değeri
pixel6Api31
'tır. Belirtilmemişse Eklenti, emülasyonlu veya fiziksel bağlı bir cihaz kullanır. - İstediğiniz yapılandırmayı aşağıda gösterildiği gibi uygulayın örneğine bakalım.
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 }
Eski
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
içinde bir Temel Profil testi oluşturun test modülü. Aşağıdaki örnek, uygulamayı başlatıp bekleyen bir testtir. etkin değil.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ı güncelleyin (ör.:app
).androidx.baselineprofile
eklentisini uygulayın.:baseline-profile
modülünebaselineProfile
bağımlılığı 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")) }
Eski
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
komutunu çalıştırarak profil oluşturun veya:app:generateVariantBaselineProfile
Gradle görevi.Oluşturma görevinin sonunda Temel Profil,
app/src/variant/generated/baselineProfiles
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 Temel Profil'i kullanabilmek için en az AGP 8.1 sürümüne geçmenizi öneririz. Gradle eklentisi ve en yeni özellikleri.
AGP 7.3-7.4 ile Temel Profiller oluşturmanız gerekiyorsa adımlar aynıdır AGP 8.1'e yönelik adımlarla aynı adımları uygulayın ve istisnalar:
- Baseline Profile Gradle eklentisini eklemeyin.
- Temel Profilleri oluşturmak için
./gradlew [emulator name][flavor][build type]AndroidTest
adlı Gradle 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 uygula
Temel Profil oluşturma aracı bir İnsan Okunabilir Biçim (HRF) metin dosyası oluşturur ana makinenize kopyalar. Oluşturulan profili uygulamak için eklemek için şu adımları uygulayın:
HRF dosyasını, oluşturduğunuz modülün derleme klasöründen profili:
[module]/build/outputs/managed_device_android_test_additional_output/[device]
Profiller şuna uyar:
[class name]-[test method name]-baseline-prof.txt
adlandırma kalıbı gibi görünen ad kalıbı:BaselineProfileGenerator-startup-baseline-prof.txt
.Oluşturulan profili
src/main/
hedefine kopyalayın ve dosyayı şu şekilde yeniden adlandırın:baseline-prof.txt
.ProfileLoader kitaplığına bağımlılık ekleme Yerel Temel Profili etkinleştirmek için uygulamanızın
build.gradle.kts
dosyasında Bulut Profillerinin kullanılamadığı derleme. Bu Temel profili yerel olarak başka cihazdan yüklemenin tek yoludur.dependencies { implementation("androidx.profileinstaller:profileinstaller:1.3.1") }
Uygulanan HRF kuralları uygulanırken uygulamanızın üretim sürümünü oluşturun ikili biçimde derlenir ve APK veya AAB'ye dahil edilir. Daha sonra dağıtın kullanmaya devam edebilirsiniz.
Temel Profili Karşılaştırma
Temel Profilinizi karşılaştırmak için yeni bir Android Enstrümanlı Test çalıştırması oluşturun
Bu yapılandırma, DMAIC ve Yalın Altı Sigma yaklaşımında tanımlanan
StartupBenchmarks.kt
veya StartupBencharks.java
dosyası. Karşılaştırma özelliği hakkında daha fazla bilgi edinmek için
test etmek için Macrobenchmark oluşturma
sınıf
ve Macrobenchmark ile ölçümü otomatikleştirin
kitaplığı.
![](https://developer.android.com/static/topic/performance/images/studio/gutter-action.png?authuser=5&hl=tr)
Bunu Android Studio'da çalıştırdığınızda, derleme çıkışı şunun ayrıntılarını içerir: Temel Profilin sağladığı hız iyileştirmeleri:
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çmeye yönelik iki temel metrik şunlardır:
- İlk ekran görüntülenene kadar geçen süre (TTID)
- Uygulama kullanıcı arayüzünün ilk karesinin görüntülenmesi için gereken süre.
- Tam gösterime kadar geçen süre (TTFD)
- TTID'ye ek olarak ilk kare görüntülendikten sonra eşzamansız olarak yüklenen içeriğin görüntülenme süresi.
TTFD,
reportFullyDrawn()
yöntemindeki
ComponentActivity
çağrılır. reportFullyDrawn()
hiçbir zaman çağrılmazsa TTID bildirilir
. reportFullyDrawn()
adlı çağrının çağrılmasından sonraya kadar ertelemeniz gerekebilir
eşzamansız yükleme tamamlandı. Örneğin, kullanıcı arayüzünde bir dinamik
RecyclerView
veya tembel gibi bir liste
listesi bir arka plan ile doldurulabilir.
çizildikten sonra tamamlanan bir görevdir. Böylece, kullanıcı arayüzünden
tamamen çizilmiş olarak işaretlenir. Bu tür durumlarda, kullanıcı arayüzüne ulaştıktan sonra çalışan kod
tamamen çizilmiş durum Temel Profil'e dahil edilmez.
Liste popülasyonunu Temel Profilinizin bir parçası olarak eklemek için
FullyDrawnReporter
için kullanılacak,
getFullyDrawnReporter()
ve uygulama kodunuza bir muhabir ekleyin.
arka plan görevi listeyi doldurmayı bitirir. FullyDrawnReporter
şunu yapmıyor:
tüm bildirenler serbest bırakılana kadar reportFullyDrawn()
yöntemini çağırın. Yaparak
Temel Profil, listeyi doldurmak için gereken kod yollarını içerir.
Bu işlem, kullanıcı için uygulamanın davranışını değiştirmez ancak Referans Değerin
Profil gerekli tüm kod yollarını içermelidir.
Uygulamanız Jetpack Compose'u kullanıyorsa aşağıdaki API'leri kullanarak tamamen çizilmiş durumu belirtin:
ReportDrawn
composable'ınızın hemen etkileşime hazır olduğunu gösterir.ReportDrawnWhen
bir koşul (ör.list.count > 0
) alır. Böylece, composable etkileşime hazır.ReportDrawnAfter
işlemi tamamlandığında, sisteme geçiş işleminin gerçekleşip gerçekleşmediğini composable etkileşime hazır.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Macrobenchmark metriklerini yakalama
- Macrobenchmark yazma
- JankStats kitaplığı