Temel Profillere genel bakış

Temel Profiller, dahil edilen kod yollarında yorumlamadan ve tam zamanında (JIT) derleme adımlarını atlayarak kod yürütme hızını ilk lansmandan itibaren yaklaşık% 30 artırır.

Android Çalışma Zamanı (ART), bir uygulamada veya kitaplıkta Temel Profil göndererek belirtilen kod yollarını Zamanın Öncesi (AOT) derlemesi aracılığıyla optimize edebilir. Böylece, her yeni kullanıcı ve her uygulama güncellemesi için performans iyileştirmeleri sağlar. Bu Profil Destekli Optimizasyon (PGO) uygulamaları, uygulamaların başlatmayı optimize etmesine, etkileşim olumsuzluğunu 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 doğrudan kullanıcıları elde tutma, işlemler ve puanlar gibi işletme metriklerinin iyileşmesini sağlar. Performansın işletme metriklerini nasıl etkilediği hakkında daha fazla bilgiyi Josh, Lyft, TikTok ve Zomato'nun hikayelerinde bulabilirsiniz.

Temel Profillerin Avantajları

Temel Profiller; uygulama başlatma, ekranlar arasında gezinme veya içerikte gezinme gibi tüm kullanıcı etkileşimlerini, ilk çalıştırıldıkları andan itibaren daha sorunsuz hale getirir. Temel Profiller, bir uygulamanın hızını ve duyarlılığını artırarak daha fazla günlük etkin kullanıcı ve daha yüksek ortalama geri dönüş ziyaret oranı sağlayabilir.

Temel Profiller, ilk lansmandan itibaren uygulamanın çalışma zamanını iyileştiren yaygın kullanıcı etkileşimleri sağlayarak uygulama başlangıcının ötesinde optimizasyonun yönlendirilmesine yardımcı olur. Rehberli AOT derlemesi kullanıcı cihazlarına bağlı değildir ve her sürüm için mobil cihaz yerine geliştirme makinesinde bir kez yapılabilir. Sürümleri Temel Profil ile gönderdiğinizde uygulama optimizasyonları, yalnızca Cloud Profilleri ile çalışmaya kıyasla çok daha hızlı bir şekilde kullanılabilir hale gelir.

Temel Profil kullanılmadığında, tüm uygulama kodları yorumlandıktan sonra bellekte JIT ile derlenir veya cihaz boştayken arka planda bir odex dosyasına yazılır. Bir uygulamayı yükledikten veya güncelledikten sonra, kullanıcılar uygulamayı ilk çalıştırdıkları andan yeni kod yolları optimize edilene kadar optimum olmayan bir deneyim yaşar. Birçok uygulama, optimizasyondan sonra yaklaşık% 30 performans artışı ölçüyor.

Başlangıç profilleri

Başlangıç profilleri, Temel Profillere benzer ancak aralarındaki fark, cihaz üzerinde optimizasyon yerine derleme zamanında kullanılmalarıdır. Başlangıç profili, başlangıç sürelerini iyileştirmek üzere DEX dosyasının düzenini optimize etmek için 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 da uygulama başlatma sırasında karşılaşılan sayfa hatalarının sayısını azaltarak başlatma sürelerini kısaltır. 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üzen optimizasyonları ve başlatma profilleri bölümüne bakın.

Başlayın

Mevcut uygulamanızın performansını optimize etmeye başlamak için Temel Profiller Oluşturma konusuna bakın.

Bağımlılık zinciri kararlı ve geliştirme sürümü sürümleri sağlar. Baseline Profile (Temel Profil) oluşturmak ve yüklemek için aşağıdaki desteklenen sürümleri veya daha yüksek bir Android Gradle eklentisi, Makrobenchmark kitaplığı ve Profil Yükleyici'yi kullanın. Bu bağımlılıklar farklı zamanlarda gereklidir ve optimum bir Temel Profil oluşturmak için bir araç zinciri olarak birlikte işlev görür.

  • Android Gradle eklentisi: com.android.tools.build:8.0.0
  • Makrobenchmark kitaplığı: androidx.benchmark:benchmark-macro-junit4:1.2.3
  • Profil Yükleyici: androidx.profileinstaller:profileinstaller:1.3.1

Temel Profiller 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,3
  • Tam kaynak grubu dizin desteği (kitaplık modülleri): Birden fazla Temel Profil kaynak dosyası tanımlayın ve artık kitaplık modüllerinin yanı sıra uygulama modülleri için src/free/generated/baselineProfiles/baseline-prof1.txt gibi varyanta duyarlı dizinleri kullanın.
  • Temel Profiller arasında şekerli tüketim sınıfları yer alır.
8,2
  • R8'in kuralları yeniden yazması: D8 ve R8, uygulama performansını optimize etmek için ihtiyaç duyduğunuz tüm kuralları tam olarak yakalayacak şekilde kullanıcıların okuyabileceği Referans Değer ve Başlangıç Profili kurallarını dönüştürebilir. Yöntemlerin Temel Profil kapsamını yaklaşık% 30 artırır ve uygulama performansını yaklaşık %15 artırır.
  • Başlangıç Profilleri: DEX içindeki kod düzenine yön vermek için bu yeni Temel Profil türünü oluşturun. Başlangıç performansını yaklaşık %15 oranında ek olarak veya büyük uygulamalar için önemli ölçüde artırır.
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 dizin desteği (uygulama modülleri): Birden fazla Temel Profil kaynak dosyası tanımlayın ve src/free/generated/baselineProfiles/baseline-prof1.txt gibi varyanta duyarlı dizinler kullanın.
7,4 Desteklenen minimum sürüm: Uygulamalar, kitaplıklardaki Temel Profilleri kullanabilir ve src/main/baseline-prof.txt dosyasında kendi Temel Profillerini sağlayabilir.
  • APK, bir uygulama paketinden derlenirken Temel Profiller doğru şekilde paketlenir (sorun no. 230361284).
  • Birden fazla .dex dosyası içeren uygulamalarda Temel Profiller, birincil .dex dosyası için doğru şekilde paketlenir.

Profil oluşturma örneği

Aşağıda, uygulama başlatma için Temel Profil oluşturmaya yönelik bir örnek sınıfın yanı sıra önerilen Makrobenchmark kitaplığını kullanan çeşitli gezinme ve kaydırma etkinlikleri gösterilmektedir:

@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, GitHub'daki performans örneklerimizin bir parçası olarak tam bağlamda ve daha ayrıntılı bir şekilde görebilirsiniz.

Dahil edilecek bilgiler:

Bir uygulamada Temel Profilleri kullanırken uygulama başlangıç kodunu ve ekranlar arasında gezinme veya kaydırma gibi yaygın kullanıcı etkileşimlerini ekleyebilirsiniz. Ayrıca kayıt, giriş veya ödeme gibi akışların tamamını da toplayabilirsiniz. Kritik gördüğünüz tüm kullanıcı yolculukları, çalışma zamanı performanslarını iyileştirerek Temel Profillerden yararlanabilir.

Performansı artırmak için farklı yaklaşımları deniyorsanız denemenizin her iki kolu için de Temel Profiller eklemeyi düşünün. Bu sayede, tüm kullanıcılarınızın sürekli olarak derlenmiş kod çalıştırmasını sağlayarak sonuçlarınızın daha kolay yorumlanmasını sağlayabilirsiniz.

Kitaplıklar kendi Temel Profillerini sağlayabilir ve uygulama performansını iyileştirmek için yayınlarla birlikte çalışabilir. Örneğin, Jetpack Compose performansında Temel Profil kullanma bölümüne bakın.

Temel Profiller nasıl çalışır?

Uygulamanızı veya kitaplığınızı geliştirirken, oluşturma süresi veya gecikmenin önemli olduğu yaygın kullanıcı etkileşimlerini kapsamak için Temel Profiller tanımlayabilirsiniz. Bunların işleyiş şekli şöyledir:

  1. Uygulamanız için kullanıcılar tarafından okunabilir profil kuralları oluşturulur ve uygulamada ikili biçimde derlenir. Bunları assets/dexopt/baseline.prof içinde bulabilirsiniz. Daha sonra, AAB'yi 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. Böylece bu yöntemler daha hızlı yürütülür. Profil, uygulamanın başlatılmasında veya çerçeve oluşturma sırasında kullanılan yöntemler içeriyorsa kullanıcı, başlatma süreleri daha hızlı ve daha az olumsuzlukla karşılaşabilir.

  3. Bu akış, uygulamanın zaman içindeki gerçek kullanımına göre performansta ince ayar yapmak için Cloud Profilleri toplama işlemiyle birlikte çalışır.

Şekil 1. Bu şema, yükleme işleminden son kullanıcı yayınına kadar Temel Profil iş akışını ve bu iş akışının Cloud Profilleri ile ilişkisini göstermektedir.

Bulut Profilleri

Cloud Profilleri, Temel Profiller ile birlikte Google Play Store tarafından toplanan ve yükleme zamanını derlemek için dağıtılan ek bir PGO biçimi sunar.

Cloud Profilleri, uygulamayla gerçek kullanıcı etkileşimlerinden etkilense de bir güncellemenin dağıtılmasından sonra birkaç saat veya birkaç gün geçmesi gerekir. Bu da kullanılabilirliklerini sınırlandırır. Profiller tamamen dağıtılana kadar, yeni veya güncellenmiş uygulamaların kullanıcıları için uygulama performansı optimum düzeyin altında kalır. Ayrıca Cloud Profilleri yalnızca Android 9 (API düzeyi 28) veya sonraki sürümleri çalıştıran Android cihazları destekler ve yalnızca yeterince geniş bir kullanıcı tabanına sahip uygulamalar için iyi ölçeklenir.

Android sürümlerinde derleme davranışı

Android Platformu sürümleri, her biri karşılık gelen performans dengesiyle farklı uygulama derleme yaklaşımları kullanır. Temel Profiller, tüm yüklemeler için bir profil sağlayarak önceki derleme yöntemlerini daha iyi hale getirir.

Android sürümü Derleme yöntemi Optimizasyon yaklaşımı
5'ten 6'ya kadar (API düzeyi 21'den 23'e kadar) Tam AOT Yükleme sırasında uygulamanın tamamı optimize edilmiştir. Bu da uygulamanın kullanılması için uzun bekleme sürelerine, RAM ve disk alanı kullanımına ve diskten daha uzun süre kod yüklemeye neden olarak soğuk başlatma sürelerini artırabilir.
7 ila 8.1 (API düzeyi 24'ten 27'ye) Kısmi AOT (Temel Profil) Uygulama modülü bu bağımlılığı tanımladığında Temel Profiller ilk çalıştırmada androidx.profileinstaller tarafından yüklenir. ART, uygulamanın kullanımı sırasında ek profil kuralları ekleyerek ve bunları cihaz boşta kaldığında derleyerek bunu daha da iyileştirebilir. Bu işlem, 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 üstü Kısmi AOT (Referans Değer + Cloud Profili) Play, uygulama yüklemeleri sırasında Temel Profilleri kullanarak APK'yı ve Cloud profillerini (varsa) optimize eder. Yüklendikten sonra ART profilleri Play'e yüklenir, birleştirilir ve daha sonra, uygulamayı yüklediklerinde veya güncellediklerinde diğer kullanıcılara Cloud Profilleri olarak sağlanır.

Bilinen sorunlar

Olası sorunlar ve çözümler veya geçici çözümler için sürekli geliştirmelerin yapıldığı sorunlar şunlardır:

  • Temel Profil oluşturma, Gradle tarafından yönetilen Test Lab cihazları da dahil olmak üzere Firebase Test Lab cihazlarında desteklenmez (sorun numarası: 285187547).

  • Kitaplıklara ilişkin Temel Profilleri başarıyla sağlamak için en azından Baseline Profile Gradle eklentisi 1.2.3 veya AGP 8.3'ü kullanın (313992099 numaralı sorun).

  • ./gradlew app:generateBaselineProfile komutuyla Temel Profil oluşturursanız test modülündeki karşılaştırmalar da çalışır ve sonuçlar silinir. Böyle bir durumda, -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile ile komutu çalıştırarak yalnızca Temel Profilleri oluşturabilirsiniz. Bu sorun, AGP 8.2'de düzeltilmiştir.

  • Tüm derleme türleri (./gradlew app:generateBaselineProfile) için Temel Profil oluşturma komutu yalnızca sürüm 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 Profillerin kullanılmasını desteklemeyebilir. Bu kanallar üzerinden yüklenen uygulamaların kullanıcıları, arka planda temizleme işlemi çalışana kadar avantajları görmez. Bu işlem bir gecede sürebilir.

  • Play Store dahili uygulama paylaşımı Temel Profilleri desteklemez ancak dahili test kanalı destekler.

  • Huawei cihazlar gibi bazı cihazlardaki pil optimizasyonları, profil kurulumunu etkileyebilir. Profillerinizin etkili bir şekilde yüklendiğinden emin olmak için karşılaştırma cihazlarınızda pil optimizasyonlarını devre dışı bırakın.

Ek kaynaklar