Baseline Profiles, yorumlamayı ve dahil edilen kod yolları için tam zamanında (JIT) derleme adımlarını atlayarak kod yürütme hızını ilk başlatmadan itibaren yaklaşık% 30 artırır.
Bir uygulamaya veya kitaplığa Baseline Profile ekleyerek Android Çalışma Zamanı (ART), Ahead-of-Time (AOT) derlemesi aracılığıyla belirtilen kod yollarını optimize edebilir. Böylece her yeni kullanıcı ve her uygulama güncellemesi için performans iyileştirmeleri sağlanır. Bu profil yönlendirmeli optimizasyon (PGO), uygulamaların başlatma işlemini optimize etmesine, etkileşimdeki sarsıntıyı azaltmasına ve ilk başlatmadan itibaren kullanıcılar için genel çalışma zamanı performansını iyileştirmesine olanak tanır.
Bu performans iyileştirmeleri, kullanıcı elde tutma oranı, işlemler ve puanlar gibi iş metriklerinde doğrudan iyileşme sağlar. Josh, Lyft, TikTok ve Zomato'nun başarı öykülerinde performansın işletme metriklerini nasıl etkilediği hakkında daha fazla bilgi edinebilirsiniz.
Temel profillerin avantajları
Temel profiller, kritik kullanıcı etkileşimlerinde (ör. uygulama başlatma, ekranlar arasında gezinme veya içeriklerde gezinme) kodun önceden derlenmesini sağlayarak ilk çalıştırılmadan itibaren daha sorunsuz bir deneyim sunar. Temel Profiller, bir uygulamanın hızını ve yanıt verme özelliğini artırarak daha fazla günlük etkin kullanıcı ve daha yüksek bir ortalama geri dönüş ziyaret oranı sağlayabilir.
Temel profiller, uygulamayı ilk kez başlattıktan sonraki çalışma zamanını iyileştiren ortak kullanıcı etkileşimleri sağlayarak optimizasyonun uygulama başlatmanın ötesine geçmesine yardımcı olur. Rehberli AOT derlemesi, kullanıcı cihazlarına bağlı değildir ve mobil cihaz yerine geliştirme makinesinde yayın başına bir kez yapılabilir. Yayınları Baseline Profile ile birlikte göndererek uygulama optimizasyonlarını yalnızca Cloud Profiles'a güvenerek yapmaktan çok daha hızlı bir şekilde kullanıma sunabilirsiniz.
Temel Profil kullanılmadığında tüm uygulama kodu, yorumlandıktan sonra bellekte JIT derlenir veya cihaz boşta olduğunda arka planda bir odex dosyasına yazılır. Kullanıcılar, bir uygulamayı yükledikten veya güncelledikten sonra yeni kod yolları optimize edilene kadar uygulamayı ilk kez çalıştırdıklarında ideal olmayan bir deneyim yaşar.
Birçok uygulama, optimizasyon sonrasında yaklaşık% 30'luk performans artışı ölçmektedir.
Başlangıç profilleri
Başlangıç profilleri, temel profillere benzer ancak cihaz üzerinde optimizasyon yerine daha hızlı başlangıç süreleri için derleme zamanında DEX düzenini optimize etmek amacıyla kullanılır. Başlangıç profillerinin temel profillerden farkı hakkında daha fazla bilgi edinmek için Temel profiller ile başlangıç profillerini karşılaştırma başlıklı makaleyi inceleyin. DEX düzeni optimizasyonu hakkında daha fazla bilgi için DEX düzeni optimizasyonları ve başlangıç profilleri başlıklı makaleyi inceleyin.
Başlayın
Mevcut uygulamanızda performansı optimize etmeye başlamak için Temel Profil Oluşturma başlıklı makaleyi inceleyin.
Profil oluşturma ve yayınlanan derlemeler
Temel ve başlangıç profili dosyaları (ör. baseline-prof.txt ve startup-prof.txt) oluştururken gereken derleme yapılandırmaları ile bu profilleri kullanan nihai yayın APK'nızı oluştururken gereken derleme yapılandırmaları arasındaki farkı anlamak önemlidir.
Profil dosyaları oluştururken (örneğin, benchmark):
Oluşturulan profil kurallarının kodunuzun yöntem imzalarıyla doğru şekilde eşleştiğinden emin olmak için profil oluşturmada kullanılan derleme varyantında karartma ve optimizasyonu (R8) devre dışı bırakmanız gerekir. Bu varyant, karartma ve optimizasyonun etkinleştirildiği yayın derleme varyantınızdan farklı olmalıdır. Bunu, profil oluşturma derleme varyantı için isMinifyEnabled = false değerini ayarlayarak yapabilirsiniz. Baseline Profile Gradle eklentisini kullanmıyorsanız -dontobfuscate ve -dontoptimize öğelerinin de uygulandığından emin olmanız gerekir. Baseline Profile Gradle
Plugin bu yapılandırmayı sizin için otomatik olarak yapar.
Son sürüm APK'nızı oluştururken:
Sürüm derlemenizde her zaman isMinifyEnabled = true olmalıdır. Bu sayede karartma, küçültme ve optimizasyondan yararlanabilirsiniz. R8, kuralları karartılmamış profil dosyalarınızdan, yayın APK'nızdaki karartılmış ve optimize edilmiş kodla eşleşecek şekilde otomatik olarak yeniden yazar. DEX düzeni optimizasyonunun
(Başlangıç Profilleri tarafından desteklenir) etkili olması için yayın uygulamanızın karartılmış olması ve tüm optimizasyonlar etkinleştirilmiş şekilde R8 kullanması gerekir.
Önerilen minimum kararlı sürümler
Bağımlılık zinciri, kararlı ve geliştirme sürümü versiyonlarını sağlar. Temel Profil oluşturup yüklemek için Android Gradle eklentisi, Macrobenchmark kitaplığı ve Profile Installer'ın aşağıdaki desteklenen sürümlerini veya daha yeni sürümlerini kullanın. Bu bağımlılıklar farklı zamanlarda gereklidir ve optimum temel profil oluşturmak için araç zinciri olarak birlikte çalışır.
- Android Gradle eklentisi:
com.android.tools.build:8.0.0 - Macrobenchmark kitaplığı:
androidx.benchmark:benchmark-macro-junit4:1.4.1 - Profil yükleyici:
androidx.profileinstaller:profileinstaller:1.4.1
Temel Profil oluşturmak ve yönetmek için AGP'nin en son sürümünü kullanmanızı öneririz. AGP'nin farklı sürümlerinde bulunan başlıca işlevler şunlardır:
| AGP sürümü | Özellikler |
|---|---|
| 8.4 | Gradle sarmalayıcı komut satırı aracı kullanılarak hata ayıklanamayan derlemelerin yerel uygulama yüklemeleri veya Android Studio, Baseline Profilleri'ni yükler. Bu nedenle, yerel sürüm derlemenizin performansı üretimle daha yakından eşleşir. Bu güncelleme, Temel Profillerin üretim performansını etkilemez. |
| 8.3 |
|
| 8.2 |
|
| 8.0 | Önerilen minimum sürüm: Tek bir Gradle göreviyle temel profiller oluşturmak için Baseline Profile Gradle eklentisini kullanın.
|
| 7.4 |
Desteklenen minimum sürüm: Uygulamalar, kitaplıklardan Temel Profilleri kullanabilir ve src/main/baseline-prof.txt dosyasında kendi Temel Profillerini sağlayabilir.
|
Varyantlara duyarlı profil kaynağı ayarları
Uygulamalar için Android Gradle Eklentisi (AGP) 8.0 sürümünü, kitaplıklar için ise AGP 8.3 sürümünü kullanarak Temel Profil kurallarını özel bir kaynak grubu dizinine yerleştirebilir, tek ve sabit bir yolun (örneğin, src/main/baseline-prof.txt) kısıtlamalarının ötesine geçebilir ve birden fazla dosyayı etkinleştirebilirsiniz.
Bu sayede, güçlü varyant desteği sağlanır ve belirli derleme türlerine ve tiplerine göre uyarlanmış farklı Baseline Profilleri tanımlayabilirsiniz (örneğin, src/variant/baselineProfiles/ gibi dizinleri kullanarak). Bu da performans optimizasyonu kurallarının her bir benzersiz uygulama veya kitaplık ikilisi için hassas bir şekilde uygulanmasını sağlar.
Profil oluşturma örneği
Aşağıda, önerilen Macrobenchmark kitaplığını kullanarak uygulama başlatma için temel profil oluşturmanın yanı sıra çeşitli gezinme ve kaydırma etkinlikleri oluşturmaya yönelik örnek bir sınıf verilmiştir:
class BaselineProfileGenerator {
@get:Rule
val baselineProfileRule = BaselineProfileRule()
@Test
fun appStartupAndUserJourneys() {
baselineProfileRule.collect(packageName = PACKAGE_NAME) {
uiAutomator {
// App startup journey.
startApp(PACKAGE_NAME)
// Find and click elements using the new DSL
onElement { textAsString() == "COMPOSE LAZYLIST" }.click()
onElement { viewIdResourceName == "myLazyColumn" }.also {
it.fling(Direction.DOWN)
it.fling(Direction.UP)
}
pressBack()
}
}
}
}
Kullanıcı yolculuklarını otomatikleştirmek için UI Automator kitaplığını kullanma hakkında daha fazla bilgi edinmek için UI Automator ile otomatik testler yazma başlıklı makaleyi inceleyin.
Bu kodu tam bağlamda ve daha ayrıntılı olarak GitHub'daki performans örneklerimizde görebilirsiniz.
Dahil edilecek bilgiler:
Bir uygulamada Temel Profiller'i kullanırken uygulama başlatma kodunu ve ekranlar arasında gezinme veya kaydırma gibi yaygın kullanıcı etkileşimlerini ekleyebilirsiniz. Kayıt, giriş veya ödeme gibi akışların tamamını da toplayabilirsiniz. Kritik olarak değerlendirdiğiniz tüm kullanıcı yolculukları, çalışma zamanı performanslarını artırarak Temel Profiller'den yararlanabilir.
Performansı artırmak için farklı yaklaşımlar deniyorsanız denemenizin her iki kolu için de Baseline Profilleri'ni eklemeyi düşünebilirsiniz. Bu sayede, tüm kullanıcılarınızın derlenmiş kodu tutarlı bir şekilde çalıştırmasını sağlayarak sonuçlarınızı daha kolay yorumlayabilirsiniz.
Kitaplıklar, kendi temel profillerini sağlayabilir ve uygulama performansını artırmak için bunları yayınlarla birlikte gönderebilir. Örneğin, Jetpack Compose performansında Temel Profil kullanma bölümüne bakın.
Temel profillerin işleyiş şekli
Uygulamanızı veya kitaplığınızı geliştirirken oluşturma süresinin ya da gecikmenin önemli olduğu yaygın kullanıcı etkileşimlerini kapsayacak şekilde Temel Profiller tanımlamayı düşünebilirsiniz. İşleyiş şekli:
Uygulamanız için insan tarafından okunabilir profil kuralları oluşturulur ve uygulamada ikili biçimde derlenir. Bu kuralları
assets/dexopt/baseline.profbölümünde bulabilirsiniz. Ardından, Android App Bundle'ı (AAB) her zamanki gibi Google Play'e yükleyebilirsiniz.Google Play, profili işler ve APK ile birlikte doğrudan kullanıcılara gönderir. Yükleme sırasında ART, profildeki yöntemlerin AOT derlemesini gerçekleştirir. Bu da söz konusu yöntemlerin daha hızlı yürütülmesini sağlar. Profil, uygulama başlatma veya çerçeve oluşturma sırasında kullanılan yöntemleri içeriyorsa kullanıcı, daha hızlı başlatma süreleri ve daha az takılma yaşayabilir.
Bu akış, zaman içinde uygulamanın gerçek kullanımına göre performansı hassaslaştırmak için Cloud Profiles toplama işlemiyle birlikte çalışır.
Temel profilleri ve başlangıç profillerini karşılaştırma
Profil dosyalarını tanımlamak ve oluşturmak için Baseline Profile Gradle eklentisini kullanırsınız.
Bu eklenti, derleme sürecine bağlanır ve AGP, okunabilir profil kurallarını APK veya AAB içinde baseline.prof olarak paketlenmiş ikili bir biçimde derler.Bu biçim, 1,5 MB'tan küçük olması koşuluyla ART tarafından cihaz üzerinde derleme için etkili bir şekilde kullanılabilir.
Oluşturulan bu profil dosyaları genellikle startup-prof.txt ve baseline-prof.txt olarak adlandırılır. İçerikleri bazen benzer görünse de (özellikle öncelikle yeni işletmelere odaklanıyorsanız) farklı amaçlara hizmet ederler ve performansı farklı aşamalarda etkilerler:
temel profil
Temel Profil dosyası, Android Runtime'ın (ART) sık kullanılan kod yollarını önceden derlemek için kullandığı kapsamlı bir kural grubu içerir. Bu sayede, uygulama performansı yalnızca başlatma süresinin ötesinde optimize edilir.
Baseline Profile dosyası genellikle Startup Profile'ınızdaki kuralların üst kümesidir. Bu dosya, uygulama başlatma optimizasyonu için gereken tüm kuralları (baselineProfile Gradle görevi aracılığıyla oluşturulur) ve diğer önemli kullanıcı yolculuklarına yönelik ek profilleri içerir. Örneğin, kaydırma ve farklı ekranlarda gezinme.
Bu ek, başlangıç dışı kurallar, includeInStartupProfile yapılandırma alanının değerinden bağımsız olarak oluşturulur.
Başlangıç Profili
Başlangıç Profili dosyası, uygulamanızın başlangıç yolu için özel olarak optimize edilmiş kurallar içerir. D8, derleme sırasında Java bayt kodunu DEX biçimine dönüştürür.
R8 daha sonra bu dosyayı kullanarak DEX dosyalarınızın düzenini etkiler ve kritik başlangıç kodunun daha hızlı yürütülmesi için birincil DEX dosyasına yerleştirilmesini sağlar. Genel olarak includeInStartupProfile değerini yalnızca uygulamanın ilk gösterimi için gerekli olan test senaryolarında true olarak ayarlamanız gerekir. Daha fazla bilgi için Create Startup Profiles (Başlangıç Profilleri Oluşturma) başlıklı makaleyi inceleyin.
Cloud Profilleri
Cloud Profilleri, Google Play Store tarafından toplanan ve yükleme zamanı derlemesi için dağıtılan ek bir PGO biçimi sunar. Bu biçim, Baseline Profilleri ile birlikte kullanılır.
Cloud Profilleri, uygulamayla gerçek dünyadaki kullanıcı etkileşimlerine dayalı olsa da güncellemelerden sonra dağıtılmaları birkaç saat ila birkaç gün sürer. Bu durum, kullanılabilirliklerini sınırlar. Profiller tam olarak dağıtılana kadar yeni veya güncellenmiş uygulamaların kullanıcıları için uygulama performansı en iyi düzeyde olmaz. Ayrıca, Cloud Profilleri yalnızca Android 9 (API düzeyi 28) veya daha yeni bir sürümü çalıştıran Android cihazları destekler ve yalnızca yeterince büyük bir kullanıcı tabanına sahip uygulamalarda iyi ölçeklenir.
Android sürümlerinde derleme davranışı
Android platform sürümleri, her biri karşılık gelen bir performans ödünleşmesiyle farklı uygulama derleme yaklaşımları kullanır. Temel profiller, tüm yüklemeler için bir profil sağlayarak önceki derleme yöntemlerini geliştirir.
| Android sürümü | Derleme yöntemi | Optimizasyon yaklaşımı |
|---|---|---|
| 5 ila 6 (API düzeyi 21 ila 23) | Tam AOT | Uygulamanın tamamı yükleme sırasında optimize edildiğinden uygulamayı kullanmak için uzun süre beklenmesi, RAM ve disk alanı kullanımının artması ve diskten kod yükleme süresinin uzaması gibi sorunlar yaşanır. Bu durum, soğuk başlatma sürelerini de uzatabilir. |
| 7 ila 8.1 (API düzeyi 24 ila 27) | Kısmi AOT (temel profil) | Temel Profil'ler, uygulama modülü bu bağımlılığı tanımladığında ilk çalıştırmada androidx.profileinstaller tarafından yüklenir. ART, uygulama kullanılırken ek profil kuralları ekleyerek ve cihaz boşta kaldığında bunları derleyerek bu durumu daha da iyileştirebilir. Bu, disk alanını ve diskten kod yükleme süresini optimize ederek uygulamanın bekleme süresini kısaltır. |
| 9 (API düzeyi 28) ve sonraki sürümler | Kısmi AOT (Temel + Bulut Profili) | Play, uygulama yüklemeleri sırasında APK'yı ve varsa Cloud profillerini optimize etmek için Baseline Profiles'ı kullanır. Yükleme işleminden sonra ART profilleri Play'e yüklenir, toplanır ve ardından uygulamayı yükleyen veya güncelleyen diğer kullanıcılara Bulut Profilleri olarak sunulur. |
Bilinen sorunlar
Aşağıda olası sorunlar ve çözümler ya da geçici çözümler için devam eden çalışmaların olduğu sorunlar yer almaktadır:
Temel profil oluşturma, OnePlus cihazlar da dahil olmak üzere bazı cihazlardaki izin ayarları nedeniyle başarısız olabilir. Bu sorunu çözmek için Geliştirici Seçenekleri ayarlarında İzin izlemeyi devre dışı bırak seçeneğini kapatın.
Temel Profil oluşturma, Gradle tarafından yönetilen Test Lab cihazları da dahil olmak üzere Firebase Test Lab cihazlarında desteklenmez (285187547 numaralı sorun).
Kitaplıklar için temel profilleri başarıyla sağlamak üzere en azından Baseline Profile Gradle eklentisi 1.2.3 veya AGP 8.3'ü kullanın (313992099 numaralı sorun).
./gradlew app:generateBaselineProfilekomutuyla temel profiller oluşturursanız test modülündeki karşılaştırmalar da çalıştırılır ve sonuçlar atılır. Bu durumda, komutu-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfileile çalıştırarak yalnızca Baseline Profilleri oluşturabilirsiniz. Bu sorun, AGP 8.2'de düzeltilmiştir.Tüm derleme türleri için temel profiller oluşturma komutu (
./gradlew app:generateBaselineProfile) yalnızca yayın derleme türü için temel profiller oluşturur. Bu sorun, AGP 8.1'de düzeltilmiştir.Google Play Store dışındaki uygulama dağıtım kanalları, yükleme sırasında Temel Profiller'in kullanılmasını desteklemeyebilir. Bu kanallar üzerinden yüklenen uygulamaların kullanıcıları, arka planda dexopt çalıştırılana kadar avantajları görmez. Bu işlem genellikle gece yapılır.
Play Store dahili uygulama paylaşımı temel profilleri desteklemez ancak dahili test kanalı destekler.
Huawei cihazlar gibi bazı cihazlarda pil optimizasyonları, profil yüklemeyi engelleyebilir. Profillerinizin etkili bir şekilde yüklendiğinden emin olmak için karşılaştırma testine tabi tuttuğunuz cihazlarınızdaki pil optimizasyonlarını devre dışı bırakın.
Ek kaynaklar
- DEX düzeni optimizasyonları ve başlangıç profilleri
- Temel Profil'lerle uygulama performansını artırma
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir.
- Temel profiller oluşturma {:#creating-profile-rules}
- Makro karşılaştırma testi olmadan temel profiller oluşturma ve ölçme
- DEX düzeni optimizasyonları ve başlangıç profilleri