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.

Bir uygulama veya kitaplıkta Temel Profil göndererek Android Runtime (ART), belirtilen kodu optimize edebilir derlemelerine ek olarak, Google Analytics 4'te performans sağlar. ürün geliştirmeleri sunar. Bu Profilde Kılavuzlu Optimizasyon (PGO), uygulamaların başlatmayı optimize etmesini, etkileşim olumsuzluğunu azaltmasını ve İlk lansmandan itibaren kullanıcıların genel çalışma zamanı performansını artırmalıdı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. Bir uygulamanın hızını ve duyarlılığını artırdığınızda Temel Profiller, daha fazla günlük etkin kullanıcı ve daha yüksek bir ortalama sağlayabilir. geri dönen ziyaret oranı.

Referans profilleri, ilk başlatmadan itibaren uygulama çalışma süresini iyileştiren yaygın kullanıcı etkileşimleri sağlayarak optimizasyona uygulama başlangıcından daha fazla yön verir. Rehberli AOT derleme işlemi kullanıcı cihazlarına bağlı değildir ve belirli bir bir geliştirme makinesi olabilir. Sürümleri Temel profilde, uygulama optimizasyonları Cloud Profillerinde görüntülenebilir.

Temel Profil kullanılmadığında tüm uygulama kodları bellekte JIT tarafından derlenir veya arka planda bir odex dosyasına yazıldıktan sonra cihaz boşta. 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 oranında performans artışı elde eder.

Başlangıç profilleri

Başlangıç profilleri Temel Profillere benzer ancak aralarındaki fark cihaz üzerinde optimizasyon yerine derleme sırası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 dosyasına, diğer kod ise ayrı DEX dosyalarına yerleştirilir. Bu, başlatma sürelerini iyileştirir Bu da uygulama başlangıcındaki sayfa hatası sayısını azaltmanıza yardımcı olur. Şu konu hakkında daha fazla bilgi edinmek için: başlangıç profillerinin ve DEX düzen optimizasyonlarının uygulama başlatma sürelerini nasıl iyileştirebileceğini, DEX düzen optimizasyonları ve başlatma belgesine bakın profil.

Başlayın

Mevcut uygulamanızdaki performansı optimize etmeye başlamak için Referans Profilleri 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.0
  • Profil Yükleyici: androidx.profileinstaller:profileinstaller:1.3.1

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

AGP sürümü Özellikler
8,4 Gradle sarmalayıcı komut satırı aracı veya Android Studio'nun temel profillerini kullanarak hata ayıklama yapılamayan derlemelerin yerel uygulama yüklemeleri. Böylece yerel sürüm derlemenizin performansı üretime daha yakın olur. Bu Güncelleme, Temel 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şlangıç performansını büyük uygulamalarda bu oran yaklaşık %15'tir.
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 grup dizin desteği (uygulama modülleri): birden fazla Temel Profil bildirin kaynak dosyalar ve src/free/generated/baselineProfiles/baseline-prof1.txt.
7,4 Desteklenen minimum sürüm: Uygulamalar Temel Profilleri kullanabilir ve kendi Temel Profillerini oluşturmalarına olanak tanır. src/main/baseline-prof.txt dosyası.
  • Temel Profiller, Bir uygulama paketindeki APK (sorun numarası 230361284).
  • Birden fazla .dex dosyasına sahip uygulamalar için, Referans değer Profiller, birincil .dex için doğru şekilde paketlenmiş dosyası olarak kaydedebilirsiniz.

Profil oluşturma örneği

Aşağıda, uygulama başlatma 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, şu belgede tam bağlamda ve daha ayrıntılı olarak görebilirsiniz: örnek performans örnekleri GitHub'ı tıklayın.

Dahil edilecek bilgiler:

Bir uygulamada temel profilleri kullanırken uygulama başlatma kodu ve ekranlar arasında gezinme veya kaydırma gibi yaygın kullanıcı etkileşimlerini ekleyebilirsiniz. Şunları yapabilirsiniz: kayıt, giriş veya ödeme gibi tüm akışları da toplayabilir. 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. Yaparak tüm mümkün olan en iyi sonucu vermeye çalışarak sonuçlarınızın daha kolay kullanıcılar sürekli olarak derlenmiş kod çalıştırıyor.

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, oluşturma süresinin veya gecikmenin önemli olduğu yaygın kullanıcı etkileşimlerini kapsayacak şekilde referans profilleri tanımlayabilirsiniz. İşleyiş şekli:

  1. Kullanıcıların okuyabileceği profil kuralları, uygulamanız için oluşturulur ve ikili biçimde kullanabilirsiniz. Bunları assets/dexopt/baseline.prof bölümünde bulabilirsiniz. Daha sonra, AAB'yi her zamanki gibi Google Play'e yükleyebilirsiniz.

  2. Google Play, profili işleyip doğrudan kullanıcılara gönderir. APK'dır. 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. Profil Kullanıcı, uygulama başlatma veya kare oluşturma sırasında kullanılan yöntemleri içeriyorsa lansman sürelerini kısaltabilir ve olumsuzlukları azaltabilir.

  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, temel profili gösterir. son kullanıcı teslimatına kadar iş akışı ve bu iş akışının .

Bulut Profilleri

Bulut Profilleri, Google Play tarafından toplanan ek bir PGO formu sunar Temel çizgisiyle birlikte, yükleme zamanı derlemesi 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. Daha Fazla, Bulut Profiller yalnızca Android 9 (API düzeyi 28) çalıştıran Android cihazları destekler veya daha yüksek olduğunu ve yalnızca yeterince geniş bir kullanıcı tabanına sahip olan uygulamalarda iyi ölçeklendirildiğini gösterir.

Android sürümlerindeki 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, öncekine göre iyileşir derleme yöntemleri sunmak için kullanır.

Android sürümü Derleme yöntemi Optimizasyon yaklaşımı
5 ila 6 (API düzeyi 21 en çok 23) Tam AOT Uygulamanın tamamı optimize edildi Bu da yükleme sırasında uzun bekleme sürelerinde uygulama, daha fazla RAM ve ve kod yüklemek için daha uzun süre diskten, potansiyel olarak artan baştan başlatma kez.
7'den 8.1'e kadar (API 24 ila 27. seviye) Kısmi AOT (Referans Profil) Temel Profiller: yükleyen androidx.profileinstaller ilk çalıştırmada app modülü ise bunu tanımlar desteklenmektedir. ART, uygulama kullanılırken ek profil kuralları ekleyerek ve cihaz boştayken bunları derleyerek bu durumu daha da iyileştirebilir. Bu disk alanını optimize eder ve kodun yüklenme süresi ve böylece diskin bekleme süresi kadardır.
9 (API düzeyi 28) ve daha yüksek 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üklemeden sonra ART profillerin yüklendiği yer Oynatma, toplama ve ardından Cloud Profilleri olarak sağlanır diğer kullanıcılara yüklemek veya güncellemek.

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:

  • Bazı cihazlardaki izin ayarları nedeniyle Temel Profil oluşturma işlemi başarısız olabilir OnePlus cihazlar da dahil olmak üzere cihazlar. Bu sorunu gidermek için Geliştirici Seçenekleri'ndeki İzin izlemeyi devre dışı bırak seçeneği Ayarlar'da devre dışı bırakabilirsiniz.

  • 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).

  • ./gradlew app:generateBaselineProfile komutuyla referans profilleri 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 temel 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 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 profillerin kullanılmasını desteklemeyebilir. 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ı çakışabilir. profil kurulumu ile. Profillerinizin yüklendiğinden emin olmak için karşılaştırma cihazlarınızdaki pil optimizasyonlarını devre dışı bırakın.

Ek kaynaklar