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 başarı öykülerinde performansın işletme metriklerini nasıl etkilediği hakkında daha fazla bilgi edinebilirsiniz.
Temel profillerin avantajları
Temel profiller, uygulama başlatma, ekranlar arasında gezinme veya içeriklerde gezinme gibi tüm kullanıcı etkileşimlerini ilk çalıştırmadan itibaren daha sorunsuz hale getirir. Baseline Profilleri, 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 yayın başına bir kez yapılabilir. Yayınları Baseline Profile ile birlikte göndererek uygulama optimizasyonları, yalnızca Cloud Profiles'a güvenmeye kıyasla çok daha hızlı bir şekilde kullanılabilir.
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 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 cihazda optimizasyon için değil, 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.
Ö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.3.4
- 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'da Baseline Profilleri yüklenir. 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 | Minimum önerilen 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.
|
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 tüm akışları 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 insanlar tarafından okunabilir profil kuralları oluşturulur ve uygulamada ikili biçimde derlenir. Bu kuralları
assets/dexopt/baseline.prof
bö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 sayede söz konusu yöntemler daha hızlı yürütülür. 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ı hassas bir şekilde ayarlamak 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 kurulan gerçek 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 geniş 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:
Baseline Profile 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ından Baseline Profile Gradle eklentisi 1.2.3 veya AGP 8.3'ü kullanın (313992099 numaralı sorun).
./gradlew app:generateBaselineProfile
komutuyla 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=BaselineProfile
ile ç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ızda 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