Başlangıç Profili Oluşturma

Başlangıç Profilleri, Temel Profillerin bir alt kümesidir. Başlangıç Profilleri, APK'nızın DEX dosyalarındaki kod düzenini iyileştirerek içerdikleri sınıfları ve yöntemleri daha da optimize etmek için derleme sistemi tarafından kullanılır. Başlangıç Profilleri ile uygulama başlatma işlemleriniz, yalnızca Temel Profillere kıyasla en az% 15 daha hızlıdır.

Şekil 1. DEX düzen optimizasyonundan elde edilen kod konumu iyileştirmesi.

Şartlar

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

  • Jetpack Makrobenchmark 1.2.0 veya daha üstü
  • Android Gradle Plugin 8.2 veya üstü
  • Android Studio Iguana veya üstü

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

  • R8 etkin. Sürüm derlemeniz için isMinifyEnabled = true değerini ayarlayın.
  • DEX düzen 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şturun

Android Studio, varsayılan Temel Profil Oluşturucu şablonunu kullandığınızda Temel Profil ile birlikte bir Başlangıç Profili oluşturur.

Başlangıç Profili oluşturmaya ve oluşturmaya ilişkin genel adımlar, Temel Profil oluşturma adımlarıyla aynıdır.

Başlangıç Profili oluşturmanın varsayılan yolu, Android Studio içindeki Temel Profil Oluşturucu modül şablonunu kullanmaktır. Buna temel bir Başlangıç Profili oluşturan başlangıç etkileşimleri de dahildir. Bu Başlangıç Profili'ni daha fazla Kritik Kullanıcı Yolculukları (CUJ) ile genişletmek için uygulama başlatma CUJ'lerinizi, includeInStartupProfile değeri true olarak ayarlanmış bir rule blokuna ekleyin. Basit uygulamalar için uygulamanın MainActivity sürümünü başlatmak yeterli olabilir. Daha karmaşık uygulamalar için uygulamayı ana ekrandan başlatma veya derin bağlantı açma gibi en yaygın giriş noktalarını uygulamanıza ekleyebilirsiniz.

Aşağıdaki kod snippet'inde, uygulamanızın ana ekrandan başlatılmasını ve derin bağlantı olarak başlatılmasını içeren bir Temel Profil oluşturma aracı (varsayılan olarak BaselineProfileGenerator.kt dosyası) gösterilmektedir. Derin bağlantı, doğrudan uygulamanın ana ekranına değil, uygulamanın haber feed'ine yönlendirir.

@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 src/<variant>/generated/baselineProfiles/startup-prof.txt konumunda Başlangıç Profili kurallarını bulun.

Başlangıç Profili optimizasyonunu onaylayın

DEX düzen optimizasyonunu onaylamak için Android Studio'yu kullanarak APK'yı açın ve DEX dosyalarındaki sınıfları doğrulayın. Birincil classes.dex alanının tamamen doldurulmadığından emin olun. Uygulamanız tek bir DEX dosyasından oluşuyorsa Başlangıç Profili'ni etkinleştirdikten sonra uygulamanın iki DEX dosyası içerip içermediğini kontrol edebilirsiniz.

Android Studio, başlangıç sınıfları tek bir DEX dosyasına sığmazsa sizi uyarır. Başlangıç sınıflarındaki başlangıç dışı yöntemlerin miktarını içeren teşhis bilgilerini almak için Başlangıç Profili'ni uygularken settings.gradle dosyasında aşağıdaki değişiklikleri yaparak R8 derleyicisinin en az 8.3.36-dev sürümüne güncellendiğinden emin olun:

Kotlin

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url = uri("https://storage.googleapis.com/r8-releases/raw")
            }
        }
        dependencies {
            classpath("com.android.tools:r8:8.3.6-dev")
        }
    }
}

Modern

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url uri('https://storage.googleapis.com/r8-releases/raw')
            }
        }
        dependencies {
            classpath 'com.android.tools:r8:8.3.6-dev"
        }
    }
}

Gradle ile derleme yaparken aşağıdaki komutta assembleRelease öğesinden sonra --info eklediğinizden emin olun.

./gradlew assembleRelease --info

Ardından teşhis, terminale yazdırılır.

Uygulamanız veya herhangi bir kitaplık tatlandırıcı alınmış API'lere referans veriyorsa bu sınıfların paket hâlindeki uyumluluk uygulamaları her zaman son DEX dosyasında yer alır. Bu son DEX dosyası, DEX düzeni optimizasyonlarında yer almaz.