Temel Profil oluşturmayı yapılandırma

Baseline Profile Gradle eklentisi, Baseline Profilleri oluşturmayı ve bakımını yapmayı kolaylaştırır. Aşağıdaki görevleri yapmanıza yardımcı olur:

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

Eklenti gereksinimleri

Temel profiller oluşturmak için Gradle tarafından yönetilen cihazları kullanma

Temel profilinizi oluşturmak için Gradle tarafından yönetilen cihaz (GMD) kullanmak istiyorsanız profil üretici modülünün (büyük olasılıkla :baselineprofile test modülü) build.gradle.kts yapılandırmasına aşağıdaki örnekte gösterildiği gibi bir GMD 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'
       }
   }
}

GMD'yi, referans profili Gradle eklentisi yapılandırmasına aşağıdaki şekilde ekleyerek referans profilleri oluşturmak için kullanın. Bu işlem, build.gradle.kts test modülünün :baselineprofile bölümünde yapılır:

Kotlin

baselineProfile {
    managedDevices += "pixel6Api31"
}

Groovy

baselineProfile {
    managedDevices = ['pixel6Api31']
}

Temel profiller oluşturmak için GMD kullandığınızda useConnectedDevices değerini false olarak ayarlayın. Bu işlemi :baselineprofile test modülünüzde yapın:

Kotlin

baselineProfile {
    ...
    useConnectedDevices = false
}

Groovy

baselineProfile {
    ...
    useConnectedDevices false
}

Farklı varyantlar için temel profiller oluşturma

Tüm varyantlarda kullanmak üzere varyant başına, lezzet başına veya tek bir dosya olarak temel profil oluşturabilirsiniz. Bu davranışı, aşağıdaki örnekte gösterildiği gibi, uygulama veya kitaplık modülünün build.gradle.kts bölümündeki birleştirme ayarı üzerinden kontrol edin.

Kotlin

baselineProfile {
    mergeIntoMain = true
}

Groovy

baselineProfile {
    mergeIntoMain true
}

Tüm varyantlar için oluşturulan profilleri tek bir profilde birleştirmek üzere 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 konumuna kaydedilir.

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

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

Birleştirme davranışını varyant başına 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'te birleştirilirken işaretin false olarak ayarlandığı varyantların profilleri src/<variant>/generated/baselineProfiles klasöründe tutulur.

Kitaplıklar için varsayılan olarak mergeIntoMain, uygulamalar için ise true olarak ayarlanır.false

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

generateBaselineProfile görevini manuel olarak kullanmak yerine, her yayın derlemesinde otomatik olarak oluşturulacak şekilde Baseline Profilleri'ni yapılandırabilirsiniz. Otomatik oluşturma ile en güncel profil, yayın derlemesine dahil edilir.

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

Kotlin

baselineProfile {
    automaticGenerationDuringBuild = true
}

Groovy

baselineProfile {
    automaticGenerationDuringBuild true
}

automaticGenerationDuringBuild işaretinin true olarak ayarlanması, her yayın derlemesi için yeni bir temel profil oluşturulmasını tetikler. Bu, ./gradlew:app:assembleRelease gibi bir assemble release build görevinin çalıştırılmasının :app:generateReleaseBaselineProfile görevini de tetiklediği, Baseline Profile enstrümantasyon testlerini başlattığı ve bu testlerin üzerinde çalıştırıldığı Baseline Profile 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 derleme ve enstrümantasyon testleri nedeniyle derleme süresini de uzatır.

./gradlew :app:generateReleaseBaseline :app:assembleRelease

Bu davranışı varyant başına da belirtebilirsiniz. Örneğin:

Kotlin

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

Groovy

baselineProfile {
    variants {
        freeRelease {
            automaticGenerationDuringBuild true
        }
    }
}

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

Temel Profil içermeyen yeni bir varyant eklemek yerine, komut satırından oluşturmayı aşağıdaki gibi devre dışı da bırakabilirsiniz:

./gradlew assembleRelease -Pandroid.baselineProfile.automaticGenerationDuringBuild=false

Temel 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 dizinde saklayabilirsiniz:

  • true: Temel profil, src/<variant>/generated/baselineProfiles içinde saklanır. Bu sayede, kaynaklarınızla en son oluşturulan profili işleyebilirsiniz.
  • false: Temel profil, derleme dizinindeki ara dosyalarda saklanır. Bu şekilde, kodunuzu işlerken 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, Baseline Profile Gradle eklentisi sizi sorunlara neden olabilecek durumlar konusunda uyarır. Uyarıları devre dışı bırakmak için ilgili seçeneği build.gradle.kts dosyanızda 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 özellik, özellikle kitaplıklar için yararlıdır. Örnek uygulamanın veya kitaplığın kendisinin 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 bu özelliği kullanabilirsiniz. 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.

Filtreler spesifikasyonu aşağıdakilerden herhangi biri olabilir:

  • Belirtilen paket ve tüm alt paketlerle eşleşmesi 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şmesi için paket adı joker karakterle bitmelidir. Örneğin, com.example.*, com.example.method ile eşleşir ancak com.example.method.bar ile eşleşmez.
  • Belirli bir sınıfı eşleştirmek için sınıf adları (örneğin, 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.**'
    }
}

Filtre kurallarını farklı varyantlar için aşağıdaki şekilde ö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.**'
            }
        }
    }
}

Ayrıca BaselineProfileRule.collect() içinde filterPredicate bağımsız değişkenini kullanarak da kuralları filtreleyebilirsiniz ancak alt paketleri filtrelemek için daha basit bir yol ve tüm modülü yapılandırmak için tek bir yer sağladığından filtreleme için Gradle eklentisini kullanmanızı öneririz.

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

Baseline Profile Gradle eklentisi, profilleri oluşturmak ve karşılaştırma testlerini çalıştırmak için ek derleme türleri oluşturur. Bu derleme türlerinin önüne benchmark ve nonMinified 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 herhangi bir özelleştirme gerektirmez. Ancak farklı bir imzalama yapılandırması uygulamak gibi bazı özel seçenekleri kullanmanın hâlâ faydalı olabileceği durumlar vardır.

Otomatik olarak oluşturulan derleme türlerini, derleme türü özelliklerinin bir alt kümesini kullanarak özelleştirebilirsiniz. Kullanılamayan ö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

Temel profiller oluştururken dikkat etmeniz gereken diğer bazı noktalar:

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

  • Uygulamanın çok büyük bir bölümünü derleyen geniş kapsamlı kurallar, disk erişiminin artması nedeniyle başlatma işlemini yavaşlatabilir. Baseline Profilleri'ni kullanmaya yeni başlıyorsanız bu konuda endişelenmenize gerek yoktur. Ancak uygulamanıza ve yolculukların boyutuna ve sayısına bağlı olarak çok sayıda yolculuk eklemek, performansın ideal seviyede olmamasına neden olabilir. Farklı profilleri 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 testlerini inceleyin.
Bir Android uygulamasına göre uyarlanmış özel bir Baseline Profile oluşturun ve etkinliğini doğrulayın.