Baseline Profile Gradle eklentisi, Temel Profiller oluşturmayı ve sürdürmeyi 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, Temel Profillerinizin oluşumunu özelleştirmek için Baseline Profile Gradle eklentisinin nasıl kullanılacağı açıklanmaktadır.
Eklenti gereksinimleri
- AGP 8.0 veya üstü
- En son Gradle eklentisi sürümüne bağımlılık
Temel Profiller oluşturmak için Gradle Yönetilen Cihazlar Kullanın
Temel Profilinizi oluşturmak amacıyla Gradle Yönetilen Cihazı (GMD) kullanmak için profil üretici modülünün build.gradle.kts
yapılandırmasına (büyük olasılıkla :baselineprofile
test modülü) aşağıdaki örnekte gösterildiği gibi bir cihaz ekleyin:
Kotlin
android { testOptions.managedDevices.devices { create<com.android.build.api.dsl.ManagedVirtualDevice>("pixel6Api31") { device = "Pixel 6" apiLevel = 31 systemImageSource = "aosp" } } }
Modern
android { testOptions.managedDevices.devices { pixel6Api31(ManagedVirtualDevice) { device 'Pixel 6' apiLevel = 31 systemImageSource 'aosp' } } }
GMD'yi, Baseline Profile Graadle eklenti yapılandırmasına aşağıdaki şekilde ekleyerek Temel Profil oluşturmak için kullanın:
Kotlin
baselineProfile { managedDevices += "pixel6Api31" }
Modern
baselineProfile { managedDevices = ['pixel6Api31'] }
Temel Profiller oluşturmak için GMD kullanırken useConnectedDevices
değerini false
olarak ayarlayın:
Kotlin
baselineProfile { ... useConnectedDevices = false }
Modern
baselineProfile { ... useConnectedDevices false }
Farklı varyantlar için Temel Profiller oluşturun
Temel Profilleri varyant veya tür başına ya da tüm varyantlardan yararlanmak için tek bir dosya olarak oluşturabilirsiniz. Bu davranışı, aşağıdaki örnekte gösterildiği gibi birleştirme ayarıyla kontrol edin.
Kotlin
baselineProfile { mergeIntoMain = true }
Modern
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 Referans Profiller oluşturulamaz. Bu nedenle, generateBaselineProfile
adlı tek bir Gradle görevi vardır. Profilin çıktısı src/main/generated/baselineProfiles
adresindedir.
Birleştirmeyi devre dışı bırakmak ve varyant başına tek bir profile sahip olmak için mergeIntoMain
öğesini 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 sürüm derleme türü olduğunda görevler şu şekildedir:
* `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 } } }
Modern
baselineProfile { variants { freeRelease { mergeIntoMain true } } }
Yukarıdaki örnekte, işaretin true
olarak ayarlandığı varyantların tümü src/main/generated/baselineProfiles
ile birleştirilirken bayrağın false
olarak ayarlandığı varyantların profilleri src/<variant>/generated/baselineProfiles
klasöründe tutulur.
Varsayılan olarak mergeIntoMain
, kitaplıklar için true
ve uygulamalar için false
değerine ayarlanır.
Yeni bir sürümü derlerken Temel Profilleri otomatik olarak oluştur
Temel Profilleri, generateBaselineProfile
görevini manuel olarak kullanmak yerine her sürüm oluşturulduğunda otomatik olarak oluşturulacak şekilde yapılandırabilirsiniz. Otomatik oluşturmada, en güncel profil sürüm derlemesine dahil edilir.
Sürüm derlemelerinde otomatik oluşturma özelliğini etkinleştirmek için automaticGenerationDuringBuild
işaretini kullanın:
Kotlin
baselineProfile { automaticGenerationDuringBuild = true }
Modern
baselineProfile { automaticGenerationDuringBuild true }
automaticGenerationDuringBuild
işaretinin true
olarak ayarlanması, her sürüm derlemesi için yeni bir Temel Profil oluşturulmasını tetikler. Bu, ./gradlew:app:assembleRelease
gibi bir derleme sürümü derleme görevi çalıştırıldığında :app:generateReleaseBaselineProfile
politikasını da tetikler, Temel Profil enstrümantasyon testlerini başlatır ve çalıştırılacağı Temel Profil derlemesini oluşturur.
Otomatik oluşturma, kullanıcıların en iyi performans avantajını elde etmesine yardımcı olur. Bununla birlikte, iki kez oluşturma ve araç testleri sayesinde derleme süresini de uzatır.
Bu davranışı aşağıdaki örnekte gösterildiği gibi varyant başına da belirtebilirsiniz:
Kotlin
baselineProfile { variants { freeRelease { automaticGenerationDuringBuild = true } } }
Modern
baselineProfile { variants { freeRelease { automaticGenerationDuringBuild true } } }
Yukarıdaki örnekte generateFreeReleaseBaselineProfile
görevi assembleFreeRelease
başlatılırken çalışır. Bu, örneğin kullanıcı, derleme sırasında her zaman profili oluşturan dağıtım derlemesi için release
ve dahili test için releaseWithoutProfile
derlemesine sahip olmak istediğinde işe yarar.
Temel Profilleri kaynaklarda depola
Temel Profilleri, saveInSrc
işaretini kullanarak kaynak dizinde depolayabilirsiniz:
true
: Temel Profil,src/<variant>/generated/baselineProfiles
içinde depolanır. Bu, kaynaklarınızla en son oluşturulan profili kaydetmenize olanak tanır.false
: Temel Profil, derleme dizinindeki ara dosyalarda depolanır. Bu şekilde, kodunuzu kaydederken en son oluşturulan profili kaydetmezsiniz.
Kotlin
baselineProfile { saveInSrc = true }
Modern
baselineProfile { saveInSrc true }
Bu davranışı her varyant için de belirtebilirsiniz:
Kotlin
baselineProfile { variants { freeRelease { saveInSrc = true } } }
Modern
baselineProfile { variants { freeRelease { saveInSrc true } } }
Profil kurallarını filtrele
Baseline Profile Gradle eklentisi, oluşturulan Temel Profil kurallarını filtrelemenizi sağlar. Bu, özellikle ö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 kitaplıklar için faydalıdır. Filtreler, belirli paketleri ve sınıfları dahil edebilir ve hariç tutabilir. Yalnızca hariç tutmayı belirttiğinizde, yalnızca eşleşen Temel Profil kuralları hariç tutulur ve diğer her şey dahil edilir.
Filtre spesifikasyonu aşağıdakilerden herhangi biri olabilir:
- Belirtilen paket ve tüm alt paketleri eşleştirmek 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 paketi eşleştirmek 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şecek 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.**") } }
Modern
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.**") } } } }
Modern
// 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()
içinde filterPredicate
bağımsız değişkenini kullanarak da filtreleyebilirsiniz ancak alt paketleri filtrelemek için daha basit bir yöntem ve modülün tamamını yapılandırmak için tek bir yer sağladığından filtreleme yapmak için Gradle eklentisini kullanmanızı öneririz.
Karşılaştırma ve Temel Profil oluşturma türlerini özelleştirme
Baseline Profile Gradle eklentisi, profilleri oluşturmak ve karşılaştırmaları çalıştırmak için ek derleme türleri oluşturur. Bu derleme türlerinin önünde benchmark
ve nonMinified
bulunur. Örneğin, eklenti release
derleme türü için 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çenekler uygulamak yine de faydalı olabilecek bazı durumlar vardır.
Derleme türü mülklerin bir alt kümesini kullanarak otomatik olarak oluşturulan derleme türlerini özelleştirebilirsiniz. Kullanılabilir olmayan mülkler 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ındığı gösterilmektedir:
Kotlin
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.getByName("benchmarkRelease") } 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 } } }
Modern
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 Profil oluştururken dikkat etmeniz gereken bazı ek noktalar şunlardır:
Derlenen Referans Profiller 1,5 MB'tan küçük olmalıdır. Bu durum, genellikle derlemeden önce çok daha büyük olan kaynak dosyalarınızdaki metin biçimi için geçerli değildir. İkili program Temel Profilinizin boyutunu, APK için
assets/dexopt/baseline.prof
veya AAB içinBUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof
altındaki çıkış yapısında bularak doğrulayın.Uygulamanın çok fazla miktarda derleyen genel kuralları, artan disk erişimi nedeniyle başlatmayı yavaşlatabilir. Temel Profiller'i kullanmaya yeni başlıyorsanız bu konuda endişelenmeyin. Ancak, uygulamanıza ve yolculukların boyutuna ve sayısına bağlı olarak çok sayıda yolculuk eklemek performansı yetersiz bırakabilir. Farklı profiller deneyerek ve eklemelerden sonra performansın gerilemediğini doğrulayarak uygulamanızın performansını test edin.