Crea profili di avvio

I profili di avvio sono un sottoinsieme dei profili di riferimento. I profili di avvio vengono utilizzati dal sistema di compilazione per ottimizzare ulteriormente le classi e i metodi che contengono migliorando il layout del codice nei file DEX APK. Con i profili di avvio, l'avvio dell'app è almeno il 15% più veloce rispetto ai soli profili di riferimento.

Figura 1. Miglioramento della località del codice grazie all'ottimizzazione del layout DEX.

Requisiti

Ti consigliamo di utilizzare i profili di avvio con i seguenti strumenti:

  • Jetpack Macrobenchmark 1.2.0 o superiore
  • Plug-in Android Gradle 8.2 o versioni successive
  • Android Studio Iguana o versioni successive

Inoltre, nell'app devono essere configurate le seguenti impostazioni:

  • R8 abilitata. Per la build della release, imposta isMinifyEnabled = true.
  • Ottimizzazioni del layout DEX attivate. Nel blocco baselineProfile {} del file di build del modulo dell'app, imposta dexLayoutOptimization = true.

Crea un profilo per startup

Android Studio crea un profilo di avvio insieme a un profilo di riferimento quando utilizzi il modello predefinito del generatore di profilo di riferimento.

I passaggi generali per creare e generare un profilo di avvio sono gli stessi di quelli per creare un profilo di riferimento.

Il modo predefinito per creare un profilo di avvio è utilizzare il modello del modulo di generazione di profili Baseline da Android Studio. Sono incluse le interazioni di avvio che formano un profilo di avvio di base. Per migliorare questo profilo di avvio con più percorsi utente critici (CUJ), aggiungi i CUJ di avvio dell'app a un blocco rule con includeInStartupProfile impostato su true. Per le app semplici, potrebbe essere sufficiente avviare il MainActivity dell'app. Per le app più complesse, ti consigliamo di aggiungere i punti di ingresso più comuni nell'app, ad esempio avviando l'app dalla schermata Home o aprendo un link diretto.

Il seguente snippet di codice mostra un generatore di profili di riferimento (per impostazione predefinita il file BaselineProfileGenerator.kt) che include l'avvio dell'app dalla schermata Home e l'avvio di un link diretto. Il link diretto rimanda direttamente al feed di notizie dell'app, non alla schermata Home.

@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")
            })
        }
    }
}

Esegui la configurazione Genera profilo di riferimento per l'app e trova le regole del profilo di avvio in src/<variant>/generated/baselineProfiles/startup-prof.txt.

Conferma l'ottimizzazione dei profili di avvio

Per confermare l'ottimizzazione del layout DEX, utilizza Android Studio per aprire l'APK e verificare le classi nei file DEX. Assicurati che il campo classes.dex principale non sia completato. Se la tua app è costituita da un solo file DEX, puoi verificare se l'app contiene due file DEX dopo aver attivato il profilo di avvio.

Android Studio ti avvisa se le classi di avvio non rientrano in un singolo file DEX. Per ottenere informazioni diagnostiche che includono la quantità di metodi non all'avvio nelle classi di avvio, assicurati che il compilatore R8 sia aggiornato almeno alla versione 8.3.36-dev apportando le seguenti modifiche al file settings.gradle quando applichi il profilo di avvio:

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")
        }
    }
}

trendy

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

Assicurati di aggiungere --info dopo assembleRelease nel comando seguente quando crei con Gradle.

./gradlew assembleRelease --info

La diagnostica viene quindi stampata al terminale.

Se la tua app o eventuali librerie fanno riferimento ad API indesiderate, le implementazioni di compatibilità in bundle di queste classi sono sempre contenute nell'ultimo file DEX. Questo ultimo file DEX deprecato non partecipa alle ottimizzazioni del layout DEX.