Temel Profiller Oluşturma

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:

  1. Temel Profil modülünü ayarlayın.
  2. Temel Profillerin oluşturulmasına yardımcı olan JUnit testini tanımlayın.
  3. Optimize etmek istediğiniz Kritik Kullanıcı Yolculukları'nı (CUJ'ler) ekleyin.
  4. 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:

  1. Dosya > Yeni > Yeni Modül
  2. Ş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.
  3. 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ı.
Şekil 2. Bu yapılandırmayı çalıştırdığınızda Referans Değer oluşturur Profili.

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:

  1. Grubu bir Macrobenchmark modülü oluşturabilirsiniz.
  2. 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ştirmek

  3. Baseline Profile Gradle eklentisini ekleme (libs.plugins.androidx.baselineprofile). Eklenti, Temel Profiller oluşturabilir ve bu profilleri gelecekte de koruyabilirsiniz.

  4. 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 öğesini systemImageSource 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:

  1. Yeni bir com.android.test modülü oluşturun. Örneğin, :baseline-profile.
  2. build.gradle.kts dosyasını şunun için yapılandırın: :baseline-profile:

    1. androidx.baselineprofile eklentisini uygulayın.
    2. targetProjectPath değerinin :app modülü.
    3. İ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.
    4. İ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
    }
    
  3. :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;
                })
            )
        }
    }
    
  4. Uygulama modülündeki build.gradle.kts dosyasını güncelleyin (ör. :app).

    1. androidx.baselineprofile eklentisini uygulayın.
    2. :baseline-profile modülüne baselineProfile 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"'
    }
    
  5. :app:generateBaselineProfile komutunu çalıştırarak profil oluşturun veya :app:generateVariantBaselineProfile Gradle görevi.

  6. 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:

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:

  1. 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.

  2. Oluşturulan profili src/main/ hedefine kopyalayın ve dosyayı şu şekilde yeniden adlandırın: baseline-prof.txt.

  3. 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")
    }
    
  4. 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ığı.

Şekil 3. Android Testlerini oluktan çalıştırın dikkat edin.

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.