Temel Profillere genel bakış

Temel profiller, dahil edilen kod yolları için yorumlama ve 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 Profile Guided Optimization (PGO), uygulamaların başlatmayı optimize etmesine, etkileşim duraklamasını 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, kritik kullanıcı etkileşimlerinde (ör. uygulama başlatma, ekranlar arasında gezinme veya içeriklerde kaydırma) 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ı sayısı ve daha yüksek bir ortalama geri dönüş ziyaret 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ı Temel Profil ile birlikte göndererek uygulama optimizasyonları, yalnızca Bulut Profilleri'ne 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 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 DEX düzenini optimize etmek amacıyla derleme zamanında 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 Profiller Oluşturma başlıklı makaleyi inceleyin.

Profil oluşturma ve yayınlanan derlemeler

Temel ve başlangıç profili dosyaları oluştururken (örneğin, baseline-prof.txt ve startup-prof.txt) 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):

Bir testle temel profil yakalarken uygulamanız karartılmamış olmalıdır. 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 derleme değişkeni, kod karartma ve optimizasyonun etkinleştirildiği yayınlanan derleme değişkeninizden farklı olmalıdır. Bunu, profil oluşturma derleme değişkeni 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.

Oluşturulan metin profili dosyanızı (örneğin, baseline-prof.txt) açıp sınıf ve yöntem adlarının karartılmadığını kontrol ederek profil oluşturma sırasında uygulamanızın karartılmadığını doğrulayabilirsiniz.

Son sürüm APK'nızı oluştururken:

Sürüm uygulamanızı oluştururken uygulamanız karartılmalıdır. Kod karartma, küçültme ve optimizasyondan yararlanmak için yayın derlemenizde isMinifyEnabled = true olmalıdır. 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. Derleme, kuralları doğru şekilde dönüştürerek karartılmamış metin dosyasından yararlanır.

DEX düzeni optimizasyonunun (Başlangıç Profilleri tarafından desteklenir) çalışmasını istiyorsanız yayın uygulamanız karartılmalı ve tüm optimizasyonlar etkinleştirilmiş şekilde R8 kullanılmalıdır.

Gelişmiş (Gradle dışı) iş akışları:

Profillerinizi oluşturmak için Gradle dışı gelişmiş bir iş akışı (ör. Bazel, Buck veya özel CI otomasyon işlem hatları) kullanıyorsanız yine de aynı ilkeleri uygulamanız gerekir. Profil yakalanırken uygulamanız karartılmamış veya optimize edilmemiş olmalıdır. Ancak yayın uygulamanızı oluştururken karartmanız gerekir. R8, karartılmamış metin kuralları dosyasını işler ve kuralları, karartılmış yayın uygulamasına uygulanacak şekilde doğru şekilde dönüştürür.

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
9.1 Tam kaynak grubu dizini desteği (kitaplık modülleri): Varyanta duyarlı dizinlere ek olarak, kitaplık modüllerinin yanı sıra uygulama modülleri için de src/free/generated/baselineProfiles/baseline-prof1.txt gibi rastgele bir ada sahip birden fazla temel profil kaynak dosyası bildirebilirsiniz.
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
  • Kısmi kaynak grubu dizini desteği (kitaplık modülleri): Kitaplık modülleri için varyant duyarlı temel profil dosyalarını (ör. src/free/generated/baselineProfiles/baseline-prof.txt) tanımlayın.
  • Temel profiller şekeri alınmış sınıfları içerir.
8.2
  • Kuralların R8 ile yeniden yazılması: D8 ve R8, okunabilir Baseline ve Startup Profile kurallarını, uygulama performansını optimize etmek için ihtiyacınız olan tüm kuralları tam olarak yakalayacak şekilde dönüştürebilir. Bu sayede, sadeleştirilmemiş bir derlemeden profiller oluşturabilir ve bunları sadeleştirilmiş bir yayınlanan derlemeye uygulayabilirsiniz. Yöntemlerin temel profil kapsamını yaklaşık% 30, uygulama performansını ise yaklaşık %15 artırır.
  • Başlangıç Profilleri: DEX'teki kodun düzeni hakkında bilgi vermek için bu tür bir Referans Profili oluşturun. Başlatma performansını yaklaşık %15 daha artırır. Büyük uygulamalarda bu oran çok daha yüksek olabilir.
8.0 Önerilen minimum sürüm: Tek bir Gradle göreviyle Temel Profiller oluşturmak için Baseline Profile Gradle eklentisini kullanın.
  • Tam kaynak grubu dizini desteği (uygulama modülleri): Birden fazla temel profil kaynak dosyası tanımlayın ve src/free/generated/baselineProfiles/baseline-prof1.txt gibi varyant duyarlı dizinler 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.
  • APK, uygulama paketinden oluşturulurken Baseline Profilleri doğru şekilde paketlenir (sorun #230361284).
  • Birden fazla .dex dosyası olan uygulamalarda, Temel Profiller birincil .dex dosyası için doğru şekilde paketlenir.
  • D8 ve R8, isMinifyEnabled değerinin false olarak ayarlandığı bir derlemeden başlangıç profilleri oluşturmayı destekler.

Varyantlara duyarlı profil kaynağı ayarları

Uygulamalar için Android Gradle eklentisinin (AGP) 8.0 sürümünü, kitaplıklar için ise AGP'nin 8.3 sürümünü kullanarak Temel Profil kurallarını özel bir kaynak grubu dizinine yerleştirebilir, tek ve sabit bir yolun (ör. 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 (örneğin, src/variant/baselineProfiles/ gibi dizinler kullanarak) göre uyarlanmış farklı temel profiller tanımlayabilirsiniz. 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 istiyorsanız 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 Profil'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 Temel Profiller'i 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. Bunların nasıl çalıştığı aşağıda açıklanmıştır:

  1. Uygulamanız için insan 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, Android App Bundle'ı (AAB) her zamanki gibi Google Play'e yükleyebilirsiniz.

  2. 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.

  3. 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.

Şekil 1. Bu şema, yüklemeden son kullanıcıya teslimata kadar olan Baseline Profile iş akışını ve bu iş akışının Cloud Profilleri ile ilişkisini gösterir.

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, bu okunabilir profil kurallarını, APK veya AAB içinde baseline.prof olarak paketlenmiş bir ikili 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 başlangıç aşamasına odaklanıyorsanız) farklı amaçlara hizmet ederler ve performansı farklı aşamalarda etkilerler:

temel profil

Temel Profil dosyası, Android Çalışma Zamanı'nı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.

Referans Profili dosyası genellikle Başlangıç Profilinizdeki 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 Girişim profilleri oluşturma başlıklı makaleyi inceleyin.

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 göre oluşturulsa 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, sıfırdan başlatma sürelerini de uzatabilir.
7 - 8.1 (API düzeyi 24 - 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 sağlanır.

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.

  • 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: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ınlanan 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 Profiller'i 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