Temel Profillere genel bakış

Temel profiller, dahil edilen kod yolları için yorumlama ve tam zamanında (JIT) derleme adımlarından kaçınarak kod yürütme hızını ilk çalıştırmaya kıyasla yaklaşık %30 artırır.

Android Runtime (ART), bir uygulamada veya kitaplıkta Temel Profil göndererek önceden derleme (AOT) 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 Kılavuzlu Optimizasyon (PGO), uygulamaların başlangıcı optimize etmesine, etkileşimdeki takılmaları azaltmasına ve kullanıcıların ilk çalıştırmadan itibaren genel çalışma zamanı performansını artırmasına olanak tanır.

Bu performans iyileştirmeleri doğrudan, şunlar gibi işletme metriklerinin iyileştirilmesini sağlar: kullanıcı elde tutma, işlemler ve puanlar gibi değerleri temel alır. Web sitemiz g.co/newsinitiative üzerinden performansı, Josh'un hikayelerinde iş metriklerini etkiliyor. Lyft, TikTok ve Zomato.

Taban Profillerin Avantajları

Referans profilleri, uygulamanın ilk kez çalıştırıldığı andan itibaren uygulama başlatma, ekranlar arasında gezinme veya içerikte gezinme gibi tüm kullanıcı etkileşimlerini daha sorunsuz hale getirir. Referans profilleri, bir uygulamanın hızını ve duyarlılığını artırarak günlük etkin kullanıcı sayısını ve ortalama yeniden ziyaret oranını artırabilir.

Temel Profiller, ortak olanaklar sağlayarak uygulama başlatmanın ötesinde optimizasyona yardımcı olur. ilk lansmandan itibaren uygulamanın çalışma zamanını iyileştiren kullanıcı etkileşimleri. Rehberli AOT derlemesi, kullanıcı cihazlarına bağlı değildir ve mobil cihaz yerine geliştirme makinesi üzerinde sürüm başına bir kez yapılabilir. Temel Profil ile sürümleri gönderdiğinizde, uygulama optimizasyonları yalnızca Bulut Profilleri'ne güvenmekten çok daha hızlı bir şekilde kullanıma sunulur.

Temel Profil kullanılmadığında tüm uygulama kodları, yorumlandıktan sonra bellekte JIT 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 ilk çalıştırdıkları andan itibaren yeni kod yolları optimize edilene kadar geçen süre. Birçok uygulama, optimizasyondan sonra yaklaşık% 30'luk performans artışını ölçmektedir.

Başlangıç profilleri

Başlangıç profilleri, temel profillere benzer ancak cihaz üzerinde optimizasyon için değil, derleme zamanında kullanılır. Startup profili, başlatma sürelerini iyileştirmek amacıyla DEX dosyasının düzenini optimize etmek için kullanılır. Başlangıç profilinde tanımlanan kod, birincil classes.dex içine yerleştirilir dosyası olur ve diğer kod ayrı DEX dosyalarına yerleştirilir. Bu, uygulama başlatılırken sayfa hatası sayısını azaltarak başlatma sürelerini iyileştirir. Başlangıç profillerinin ve DEX düzen 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şlangıç profilleri başlıklı makaleyi inceleyin.

Başlayın

Mevcut uygulamanızdaki performansı optimize etmeye başlamak için Referans Profili Oluşturma başlıklı makaleyi inceleyin.

Bağımlılık zinciri, kararlı ve geliştirme sürümleri sağlar. Alıcı: Temel Profil oluşturup yükleyin, aşağıdaki desteklenen sürümleri kullanın veya daha yüksek Android Gradle eklentisi, Macrobenchmark kitaplığı ve Profil Yükleyici. Bu bağımlılıklar farklı zamanlarda gerekir ve birlikte araç zincirini kullanmaya devam edin.

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

Temel çizgisini oluşturmak ve yönetmek için AGP'nin en son sürümünü kullanmanızı öneririz Profiller. AGP'nin farklı sürümleriyle birlikte sunulan temel işlevler şunlardır:

AGP sürümü Özellikler
8,4 Hata ayıklama yapılamayan derlemelerin yerel uygulama yüklemeleri Gradle sarmalayıcı komut satırı aracı veya Android Studio'da Temel Profiller yükleyebilirsiniz. Böylece, yerel sürümünüz üretimle daha yakından eşleşiyor. Bu güncelleme, referans profillerin üretim performansını etkilemez.
8,3
  • Tam kaynak grup dizin desteği (kitaplık modülleri): birden fazla Temel Profil kaynak dosyası tanımlayıp gibi değişkene duyarlı dizinler src/free/generated/baselineProfiles/baseline-prof1.txt, şimdi kitaplık modüllerinin yanı sıra uygulama modüllerinde de kullanılabilecek.
  • Temel Profiller şunları içerir: yararlı sınıflar.
8,2
  • Kuralların R8 ile yeniden yazılması: D8 ve R8, uygulama performansını optimize etmek için ihtiyaç duyduğunuz tüm kuralları tam olarak yakalamak amacıyla, kullanıcı tarafından okunabilen temel ve başlangıç profili kurallarını dönüştürebilir. Artışlar Yöntemlerin temel profil kapsamı yaklaşık% 30 oranında artarken uygulamanın kapsamı genişler yaklaşık %15'e varan bir oranda arttı.
  • Başlangıç Profilleri: bu yeni Temel Profil türünü, sayfa düzenini DEX'teki kodu kullanabilirsiniz. Başlatma performansını yaklaşık %15 oranında veya büyük uygulamalarda önemli ölçüde daha fazla artırır.
8.0 Önerilen minimum sürüm: Tek bir Gradle görevi ile temel profil oluşturmak için temel profil Gradle eklentisini kullanın.
  • Tam kaynak kümesi 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 bilinçli dizinler kullanın.
7,4 Desteklenen minimum sürüm: Uygulamalar, kitaplıklardan Temel Profiller kullanabilir ve src/main/baseline-prof.txt dosyasında kendi Temel Profillerini sağlayabilir.
  • APK, uygulama paketinden oluşturulurken temel profiller doğru şekilde paketlenir (sorun #230361284).
  • Birden fazla .dex dosyası olan uygulamalarda, temel profiller birincil .dex dosyası için doğru şekilde paketlenir.

Profil oluşturma örneği

Aşağıda, uygulama başlangıcı için Temel Profil oluşturmaya yönelik bir örnek sınıf verilmiştir. ve ayrıca önerilen öğeler içeren çeşitli gezinme ve kaydırma Makrobenchmark kitaplık:

@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 örneklerimiz kapsamında tam bağlamında ve daha ayrıntılı olarak görebilirsiniz.

Dahil edilecek bilgiler:

Bir uygulamada referans profilleri kullanırken uygulama başlatma kodu 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 olduğunu düşündüğünüz tüm kullanıcı yolculukları, çalışma zamanı performansını iyileştirerek temel profillerden yararlanabilir.

Performansı artırmak için farklı yaklaşımları deniyorsanız denemenizin her iki kolu için de Temel Profilleri ekleyebilirsiniz. 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 yorumlanmasını kolaylaştırabilirsiniz.

Kitaplıklar kendi Temel Profillerini sağlayabilir ve bunları ve uygulama performansını iyileştirir. Örneğin, Jetpack Compose performansı.

Temel Profillerin işleyiş şekli

Uygulamanızı veya kitaplığınızı geliştirirken Temel Profilleri tanımlarken oluşturma süresinin veya gecikmenin önemli olduğu yaygın kullanıcı etkileşimlerini ele alacağız. İşleyiş şekli:

  1. Kullanıcıların okuyabileceği profil kuralları, uygulamanız için oluşturulur ve ikili biçimde kullanılabilir. Bunları assets/dexopt/baseline.prof bölümünde bulabilirsiniz. Ardından 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. ART, yükleme sırasında yöntemlerin AOT derlenmesini gerçekleştirir. bu da yöntemlerin daha hızlı yürütülmesine neden olur. Profilde uygulama başlatılırken veya kare oluşturma sırasında kullanılan yöntemler varsa kullanıcı daha hızlı başlatma süreleri ve daha az takılma yaşayabilir.

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

Şekil 1. Bu şema, yükleme işleminden son kullanıcıya yayınlama işlemine kadar olan temel profil iş akışını ve bu iş akışının Cloud Profilleriyle olan ilişkisini gösterir.

Bulut Profilleri

Bulut Profilleri, Google Play tarafından toplanan ek bir PGO formu sunar Temel çizgisiyle birlikte, yükleme zamanı derlenmesi için saklanıp dağıtılır Profiller.

Cloud Profilleri, uygulama ile gerçek dünyadaki kullanıcı etkileşimleriyle desteklenir. bir güncellemenin dağıtılmasından sonra birkaç saat veya birkaç gün sürer. en iyi uygulamaları görelim. Profiller tamamen dağıtılana kadar performans, yeni veya güncellenmiş uygulama kullanıcıları için optimum düzeyin altında. Ayrıca Cloud Profiller yalnızca Android 9 (API düzeyi 28) veya sonraki sürümleri çalıştıran Android cihazları destekler ve yalnızca yeterince büyük bir kullanıcı tabanı olan uygulamalarda iyi ölçeklenir.

Android sürümleri arasındaki derleme davranışı

Android Platformu sürümlerinde farklı uygulama derleme yaklaşımları kullanılmaktadır. Bu yaklaşımların her birinde performans dengesi sağlar. Temel profiller, tüm yüklemeler için bir profil sağlayarak önceki derleme yöntemlerini iyileş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 edilir. Bu da uygulamayı kullanmaya başlamak için uzun bekleme sürelerine, RAM ve disk alanı kullanımının artmasına ve diskten kod yükleme süresinin uzamasına neden olur. Bu da soğuk başlatma sürelerinin uzamasına neden olabilir.
7'den 8.1'e kadar (API 24 ila 27. seviye) Kısmi AOT (Referans değerler) profil) Temel Profiller: yükleyen androidx.profileinstaller. ilk çalıştırmada app modülü ise bunu tanımlar desteklenmektedir. ART iyileştirilebilir ek bilgi ekleyerek ek profil kuralları ve kontrollerin bunları derlerlerken cihaz boşta. Bu, disk alanından kod yükleme süresini ve disk alanını optimize ederek uygulamanın bekleme süresini azaltır.
9 (API düzeyi 28) ve sonraki sürümler Kısmi AOT (Referans Değer + Cloud Profile) Play, Temel Profilleri kullanır dönüşüm artışı elde etmek için APK ve Cloud'u optimize etmek profillerine (varsa) dokunun. Yükleme işleminden sonra ART profilleri Play'e yüklenir, birleştirilir ve ardından uygulamayı yükleyen veya güncelleyen diğer kullanıcılara Bulut Profili olarak sağlanır.

Bilinen sorunlar

Aşağıda, olası sorunlar ve çözümler ya da geçici çözümler için devam eden geliştirmeler olan sorunlar verilmiştir:

  • OnePlus cihazlar da dahil olmak üzere bazı cihazlardaki izin ayarları nedeniyle temel profil oluşturma işlemi başarısız olabilir. Bu sorunu önlemek için Geliştirici Seçenekleri ayarlarında İzin izlemeyi devre dışı bırak seçeneğini kapatın.

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

  • Kitaplıklara Temel Profilleri başarıyla sağlamak için En azından Baseline Profile Gradle eklentisi 1.2.3 veya AGP 8.3 (sorun numarası 313992099).

  • Şu komutu kullanarak Temel Profiller oluşturursanız: ./gradlew app:generateBaselineProfile, test modülündeki karşılaştırmalar çalışır ve sonuçlar silinir. Böyle bir durumda, komutu şununla birlikte çalıştırarak yalnızca Temel Profiller'e izin verir: -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile 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 aşağıdakiler için Temel Profiller oluşturur sürüm derleme türünü belirtmelisiniz. 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. Bu uygulamalar üzerinden yüklenen uygulamaların kullanıcıları arka plan dexoptimizasyon çalışana kadar takip etmeniz gerekir.

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

  • Huawei cihazlar gibi bazı cihazlardaki pil optimizasyonları, profil yükleme işlemini engelleyebilir. Profillerinizin etkili bir şekilde yüklenmesini sağlamak için karşılaştırma cihazlarınızdaki pil optimizasyonlarını devre dışı bırakın.

Ek kaynaklar