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 dell'APK. Con i profili di avvio, l'avvio dell'app è fino al 15% più veloce rispetto ai soli profili di riferimento.
![](https://developer.android.com/static/topic/performance/images/dex-layout-optimizations.png?authuser=6&hl=it)
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, impostadexLayoutOptimization = 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.
Consigliato per te
- Nota: il testo del link viene visualizzato quando JavaScript è disattivato
- Crea profili di riferimento {:#Creating-profile-rules}
- Profili di riferimento {:#baseline-profile}
- Scrivere un microbenchmark