Temel Profil oluşturmayı yapılandırma

Temel Profil Gradle eklentisi, temel profiller oluşturmayı ve yönetmeyi kolaylaştırır. Aşağıdaki görevleri yapmanıza yardımcı olur:

Bu sayfada, temel profillerinizin oluşturulmasını özelleştirmek için temel profil Gradle eklentisinin nasıl kullanılacağı açıklanmaktadır.

Eklenti şartları

Referans profilleri oluşturmak için Gradle tarafından yönetilen cihazlar kullanma

Temel profilinizi oluşturmak için Gradle Managed Device (GMD) kullanmak istiyorsanız aşağıdaki örnekte gösterildiği gibi profil üretici modülünün (muhtemelen :baselineprofile test modülü) build.gradle.kts yapılandırmasına bir tane ekleyin:

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'
       }
   }
}

Referans profilleri oluşturmak için GMD'yi, :baselineprofile test modülünün build.gradle.kts bölümüne aşağıdaki gibi referans profil Gradle eklenti yapılandırmasına ekleyerek kullanın:

Kotlin

baselineProfile {
    managedDevices += "pixel6Api31"
}

Groovy

baselineProfile {
    managedDevices = ['pixel6Api31']
}

Referans profilleri oluşturmak için GMD kullandığınızda :baselineprofile test modülünüzde useConnectedDevices değerini false olarak ayarlayın:

Kotlin

baselineProfile {
    ...
    useConnectedDevices = false
}

Groovy

baselineProfile {
    ...
    useConnectedDevices false
}

Farklı varyantlar için temel profiller oluşturma

Referans profillerini varyant başına, lezzet başına veya tüm varyantlarda kullanılacak tek bir dosya olarak oluşturabilirsiniz. Bu davranışı, uygulama veya kitaplık modülünün build.gradle.kts bölümünde aşağıdaki örnekte gösterildiği gibi birleştirme ayarı üzerinden kontrol edebilirsiniz.

Kotlin

baselineProfile {
    mergeIntoMain = true
}

Groovy

baselineProfile {
    mergeIntoMain true
}

Tüm varyantlar için oluşturulan profilleri tek bir profilde birleştirmek istiyorsanız mergeIntoMain değerini true olarak ayarlayın. Bu ayar true olduğunda varyant başına temel profil oluşturmak mümkün değildir. Bu nedenle, generateBaselineProfile adlı tek bir Gradle görevi vardır. Profil, src/main/generated/baselineProfiles değerinde çıktı olarak verilir.

Birleştirmeyi devre dışı bırakmak ve varyant başına bir profil kullanmak için mergeIntoMain değerini false olarak ayarlayın. Bu durumda, varyanta özel birden fazla Gradle görevi vardır. Örneğin, iki sürüm (ücretsiz ve ücretli gibi) ve bir sürüm derleme türü olduğunda görevler şunlardır:

* `generateFreeReleaseBaselineProfile`
* `generatePaidReleaseBaselineProfile`
* `generateReleaseBaselineProfile`

Varyant başına birleştirme davranışını belirtmek için aşağıdaki kodu kullanın:

Kotlin

baselineProfile {
    variants {
        freeRelease {
            mergeIntoMain = true
        }
    }
}

Groovy

baselineProfile {
    variants {
        freeRelease {
            mergeIntoMain true
        }
    }
}

Önceki örnekte, işaretin true olarak ayarlandığı varyantların tümü src/main/generated/baselineProfiles ile birleştirilir. İşaretin false olarak ayarlandığı varyantların profilleri ise src/<variant>/generated/baselineProfiles klasöründe tutulur.

Varsayılan olarak mergeIntoMain, kitaplıklar için true ve uygulamalar için false olarak ayarlanır.

Yeni bir sürüm oluştururken temel profilleri otomatik olarak oluşturma

generateBaselineProfile görevini manuel olarak kullanmak yerine, temel profilleri her sürüm derlemesiyle otomatik olarak oluşturulacak şekilde yapılandırabilirsiniz. Otomatik oluşturma özelliğiyle, en güncel profil sürüm derlemesine dahil edilir.

Sürüm derlemeleri için otomatik oluşturmayı etkinleştirmek üzere automaticGenerationDuringBuild işaretini kullanın:

Kotlin

baselineProfile {
    automaticGenerationDuringBuild = true
}

Groovy

baselineProfile {
    automaticGenerationDuringBuild true
}

automaticGenerationDuringBuild işaretini true olarak ayarlamak, her sürüm derlemesi için yeni bir Temel Profil oluşturulmasını tetikler. Bu, ./gradlew:app:assembleRelease gibi bir derleme yayınlama derleme görevinin çalıştırılmasının :app:generateReleaseBaselineProfile'u da tetiklediği, temel profil enstrümantasyon testlerini başlattığı ve bu testlerin çalıştırıldığı temel profil derlemesini oluşturduğu anlamına gelir. Otomatik oluşturma, kullanıcıların en iyi performans avantajını elde etmesine yardımcı olurken çift oluşturma ve enstrümasyon testleri nedeniyle derleme süresini de uzatır.

Bu davranışı varyant başına da belirtebilirsiniz. Aşağıdaki örnekte gösterildiği gibi:

Kotlin

baselineProfile {
    variants {
        freeRelease {
            automaticGenerationDuringBuild = true
        }
    }
}

Groovy

baselineProfile {
    variants {
        freeRelease {
            automaticGenerationDuringBuild true
        }
    }
}

Önceki örnekte, assembleFreeRelease başlatılırken generateFreeReleaseBaselineProfile görevi çalışır. Bu, kullanıcının örneğin, derleme sırasında her zaman profili oluşturan bir dağıtım derlemesi ve dahili test için bir releaseWithoutProfile derlemesi istediğinde yardımcı olur.release

Taban profilleri kaynaklara kaydetme

Temel profilleri, uygulama veya kitaplık modülünün build.gradle.kts bölümündeki saveInSrc işaretini kullanarak kaynak dizininde saklayabilirsiniz:

  • true: Temel Profil, src/<variant>/generated/baselineProfiles alanında depolanır. Bu sayede, oluşturulan en son profili kaynaklarınızla birlikte gönderebilirsiniz.
  • false: Temel profil, derleme dizinindeki ara dosyalarda depolanır. Bu sayede, kodunuzu gönderirken en son oluşturulan profili kaydetmezsiniz.

Kotlin

baselineProfile {
    saveInSrc = true
}

Groovy

baselineProfile {
    saveInSrc true
}

Bu davranışı varyant başına da belirtebilirsiniz:

Kotlin

baselineProfile {
    variants {
        freeRelease {
            saveInSrc = true
        }
    }
}

Groovy

baselineProfile {
    variants {
        freeRelease {
            saveInSrc true
        }
    }
}

Uyarıları devre dışı bırakma

Varsayılan olarak, Temel Profil Gradle Eklentisi, soruna neden olabilecek durumlar hakkında sizi uyarır. Uyarıları devre dışı bırakmak için build.gradle.kts dosyanızda ilgili seçeneği false olarak ayarlayabilirsiniz. Uyarı seçenekleri şunlardır:

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
    }
}

Profil kurallarını filtreleme

Temel Profil Gradle eklentisi, oluşturulan temel profil kurallarını filtrelemenize olanak tanır. Bu, özellikle örnek uygulamanın veya kitaplığın diğer bağımlılıklarının parçası olan sınıflar ve yöntemler için profil kurallarını hariç tutmak istiyorsanız kitaplıklarda kullanışlıdır. Filtreler belirli paketleri ve sınıfları dahil edebilir veya hariç tutabilir. Yalnızca hariç tutulanları belirttiğinizde yalnızca eşleşen temel profil kuralları hariç tutulur ve diğer her şey dahil edilir.

Filtre özellikleri aşağıdakilerden biri olabilir:

  • Belirtilen paketle ve tüm alt paketlerle eşleşmek için çift joker karakterle biten paket adı. Örneğin, com.example.**, com.example.method ve com.example.method.bar ile eşleşir.
  • Yalnızca belirtilen paketle eşleşmek için joker karakterle biten paket adı. Örneğin, com.example.*, com.example.method ile eşleşir ancak com.example.method.bar ile eşleşmez.
  • Belirli bir sınıfla eşleşen sınıf adları (ör. com.example.MyClass).

Aşağıdaki örneklerde, belirli paketlerin nasıl dahil edileceği ve hariç tutulacağı gösterilmektedir:

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.**'
    }
}

Farklı varyantlar için filtre kurallarını aşağıdaki gibi özelleştirin:

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.**'
            }
        }
    }
}

Kuralları BaselineProfileRule.collect()'daki filterPredicate bağımsız değişkenini kullanarak da filtreleyebilirsiniz. Ancak filtreleme için Gradle eklentisini kullanmanızı öneririz. Bu eklenti, alt paketleri filtrelemek için daha basit bir yol ve modülün tamamını yapılandırabileceğiniz tek bir yer sunar.

Karşılaştırma ve temel profil derleme türlerini özelleştirme

Referans Profil Gradle eklentisi, profilleri oluşturmak ve karşılaştırmalar yapmak için ek derleme türleri oluşturur. Bu derleme türlerinin önüne benchmark ve nonMinified ön ekleri eklenir. Örneğin, release derleme türü için eklenti benchmarkRelease ve nonMinifiedRelease derleme türlerini oluşturur. Bu derleme türleri, belirli kullanım alanı için otomatik olarak yapılandırılır ve genellikle özelleştirme gerektirmez. Ancak bazı özel seçenekleri uygulamanın (ör. farklı bir imzalama yapılandırması uygulama) yine de yararlı olabileceği bazı durumlar vardır.

Otomatik olarak oluşturulan derleme türlerini, derleme türü özelliklerinin bir alt kümesini kullanarak özelleştirebilirsiniz. Kullanılamaz özellikler geçersiz kılınır. Aşağıdaki örnekte, ek derleme türlerinin nasıl özelleştirileceği ve hangi özelliklerin geçersiz kılınacağı gösterilmektedir:

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       
        }
    }
}

Ek notlar

Referans profilleri oluştururken dikkat etmeniz gereken bazı noktalar:

  • Derlenmiş referans profilleri 1,5 MB'tan küçük olmalıdır. Bu, kaynak dosyalarınızdaki metin biçimi için geçerli değildir. Bu dosyalar genellikle derlemeden önce çok daha büyüktür. APK için assets/dexopt/baseline.prof veya AAB için BUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof altındaki çıkış yapısını bularak ikili temel profilinizin boyutunu doğrulayın.

  • Uygulamanın çok fazla kısmını derleyen geniş kurallar, disk erişiminin artması nedeniyle başlatmayı yavaşlatabilir. Temel Profiller'i kullanmaya yeni başladıysanız bu konuda endişelenmeyin. Ancak uygulamanıza ve yolculukların boyutuna ve sayısına bağlı olarak çok fazla yolculuk eklemek, optimum olmayan bir performansa neden olabilir. Farklı profiller deneyerek ve eklemelerden sonra performansın düşmediğini doğrulayarak uygulamanızın performansını test edin.

Codelab uygulamaları

Performansı ölçmek için makro karşılaştırma analizine göz atın.
Bir Android uygulamasına özel olarak hazırlanmış özel bir referans profili oluşturun ve bu profilin etkililiğini doğrulayın.