Başlangıç Profili Oluşturma

Başlangıç Profilleri, Temel Profiller'in bir alt kümesidir. Başlangıç profilleri, APK'nızın DEX dosyalarındaki kodun düzenini iyileştirerek içerdiği sınıfları ve yöntemleri daha iyi optimize etmek için derleme sistemi tarafından kullanılır. Başlangıç profilleri sayesinde, uygulamanızın başlatılması genellikle yalnızca temel profiller kullanıldığında olduğundan% 15 ila% 30 daha hızlıdır.

Şekil 1. DEX düzeni optimizasyonu sayesinde kod yerelliğinde iyileşme.

Şartlar

Başlangıç profillerini aşağıdaki araçlarla kullanmanızı öneririz:

  • Jetpack Macrobenchmark 1.2.0 veya sonraki sürümler
  • Android Gradle eklentisi 8.2 veya sonraki sürümler
  • Android Studio Iguana veya sonraki sürümler

Ayrıca uygulamanızda aşağıdaki ayarların bulunması gerekir:

  • R8 etkinleştirildi. Yayın derlemeniz için isMinifyEnabled = true değerini ayarlayın.
  • DEX düzeni optimizasyonları etkinleştirildi. Uygulama modülünün derleme dosyasının baselineProfile {} bloğunda dexLayoutOptimization = true değerini ayarlayın.

Başlangıç Profili oluşturma

Android Studio, varsayılan Baseline Profile Generator şablonunu kullandığınızda Baseline Profile'ın yanı sıra bir başlangıç profili oluşturur.

Başlangıç profili oluşturma ve üretme ile ilgili genel adımlar, temel profil oluşturma adımlarıyla aynıdır.

Başlangıç profili oluşturmanın varsayılan yolu, Android Studio'daki Baseline Profile Generator modül şablonunu kullanmaktır. Buna, temel bir Başlangıç Profili oluşturan başlangıç etkileşimleri dahildir. Bu Başlangıç Profili'ni daha fazla Kritik Kullanıcı Yolculuğu (CUJ) ile zenginleştirmek için uygulama başlangıcı CUJ'lerinizi rule olarak ayarlanmış includeInStartupProfile içeren bir true bloğuna ekleyin. Basit uygulamalar için uygulamanın MainActivity başlatılması yeterli olabilir. Daha karmaşık uygulamalar için, uygulamayı ana ekrandan başlatma veya derin bağlantı ile başlatma gibi en yaygın giriş noktalarını eklemeyi düşünebilirsiniz.

Aşağıdaki kod snippet'inde, uygulamanızı ana ekrandan başlatmayı ve derin bağlantı üzerinden başlatmayı içeren bir Baseline Profile oluşturucu (varsayılan olarak BaselineProfileGenerator.kt dosyası) gösterilmektedir. Derin bağlantı, uygulamanın ana ekranına değil doğrudan uygulamanın haber feed'ine gider.

@RunWith(AndroidJUnit4::class)
@LargeTest
class BaselineProfileGenerator {

    @get:Rule
    val rule = BaselineProfileRule()

    @Test
    fun generate() {
        rule.collect(
            packageName = "com.example.app",
            includeInStartupProfile = true
        ) {
            // Launch directly into the NEWS_FEED.
            startActivityAndWait(Intent().apply {
                setPackage(packageName)
                setAction("com.example.app.NEWS_FEED")
            })
        }
    }
}

Uygulama için temel profil oluştur yapılandırmasını çalıştırın ve Başlangıç Profili kurallarını src/<variant>/generated/baselineProfiles/startup-prof.txt konumunda bulun.

Başlangıç profilleri oluştururken dikkat edilmesi gerekenler

Bir başlangıç profili oluştururken hangi kullanıcı yolculuklarını ele alacağınıza karar vermek için kullanıcıların çoğunun uygulamayı nereden başlattığını göz önünde bulundurun. Genellikle başlatıcıdan ve kullanıcılar oturum açtıktan sonra yapılır. Bu, en temel başlangıç profili yolculuğudur.

İlk kullanım alanı ele alındıktan sonra uygulama başlatma için kullanıcı dönüşüm hunisini izleyin. Çoğu durumda, uygulama başlatma dönüşüm hunileri şu listeyi takip eder:

  1. Ana başlatıcı etkinliği
  2. Uygulama başlatmayı tetikleyen bildirimler
  3. İsteğe bağlı başlatıcı etkinlikleri

Bu listeyi en üstten başlayarak çalıştırın ve classes.dex dolmadan durdurun. Daha sonra daha fazla yolculuğu kapsamak için kodu başlangıç yolundan çıkarın ve daha fazla yolculuk ekleyin. Kodu başlangıç yolunun dışına taşımak için uygulama başlangıcı sırasında Perfetto izlerini inceleyin ve uzun süren işlemleri arayın. Uygulama başlangıcı sırasında yöntem çağrılarıyla ilgili otomatikleştirilebilir ve eksiksiz bir görünüm için yöntem izleme etkinleştirilmiş bir makro karşılaştırma testi de kullanabilirsiniz.