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:
- Uygulamanız için yeni temel profiller oluşturun.
- Kitaplığınız için yeni referans profilleri oluşturun.
- Temel profil oluşturma işlemini özelleştirin.
Bu sayfada, temel profillerinizin oluşturulmasını özelleştirmek için temel profil Gradle eklentisinin nasıl kullanılacağı açıklanmaktadır.
Eklenti şartları
- AGP 8.0 veya sonraki sürümler
- En son Gradle eklentisi sürümüne bağımlılık
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
vecom.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 ancakcom.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çinBUNDLE-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.