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