Temel Profil, dahil edilen kod yolları için yorumlama ve tam zamanında (JIT) derleme adımlarını atlayarak ilk başlatmadan itibaren kod yürütme hızını yaklaşık% 30 artırır.
Bir uygulamada veya kitaplıkta Baseline Profile göndererek Android Runtime (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 Profile Guided Optimization (PGO), uygulamaların başlatma işlemini optimize etmesine, etkileşimdeki takılmaları 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 hikayelerinden performansın işletme metriklerini nasıl etkilediği hakkında daha fazla bilgi edinebilirsiniz.
Temel profillerin avantajları
Temel profiller, uygulamanın ilk çalıştırılmasından itibaren uygulama başlatma, ekranlar arasında gezinme veya içeriklerde gezinme gibi tüm kullanıcı etkileşimlerini daha sorunsuz hale getirir. 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üş oranı sağlayabilir.
Temel Profiller, ilk başlatmadan itibaren uygulamanın ç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 sürüm 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 kaldığında arka planda bir odex dosyasına yazılır. Kullanıcılar, bir uygulamayı yükledikten veya güncelledikten sonra ilk kez çalıştırdıklarında yeni kod yolları optimize edilene kadar 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 derleme zamanında kullanılır. Başlangıç profili, başlangıç sürelerini iyileştirmek için DEX dosyasının düzenini optimize etmek amacıyla kullanılır.
Başlangıç profilinde tanımlanan kod, birincil classes.dex
dosyasına, diğer kod ise ayrı DEX dosyalarına yerleştirilir. Bu, uygulama başlatma sırasında sayfa hatalarının sayısını azaltarak başlatma sürelerini iyileştirir. Başlangıç profilleri ve DEX düzeni optimizasyonlarının uygulama başlatma sürelerini nasıl iyileştirebileceği hakkında daha fazla bilgi edinmek 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ın derlemeleri
Temel ve başlangıç profili dosyaları (örneğin, 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 işler.
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ü sürümlerini 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 Baseline Profile'ları kullanabilir ve src/main/baseline-prof.txt dosyasında kendi Baseline Profile'larını sağlayabilir.
|
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:
@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
@get:Rule
val baselineProfileRule = BaselineProfileRule()
@Test
fun appStartupAndUserJourneys() {
baselineProfileRule.collect(packageName = PACKAGE_NAME) {
// App startup journey.
startActivityAndWait()
device.findObject(By.text("COMPOSE LAZYLIST")).clickAndWait(Until.newWindow(), 1_000)
device.findObject(By.res("myLazyColumn")).also {
it.fling(Direction.DOWN)
it.fling(Direction.UP)
}
device.pressBack()
}
}
}
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 Profiles'ı eklemeyi düşünebilirsiniz. Bu işlemi yaparak tüm kullanıcılarınızın derlenmiş kodu tutarlı bir şekilde çalıştırmasını sağlayabilir ve 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, AAB'yi 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 deneyimleyebilir.
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.
Cloud Profilleri
Cloud Profiles, 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 Profiles 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üncellenen 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 - 8.1 (API düzeyi 24 - 27) | Kısmi AOT (temel profil) | Baseline Profilleri, 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 daha yeni sürümler | Kısmi AOT (Temel + Cloud 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 işlemi, 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 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ı cihazlardaki 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
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