I profili Baseline migliorano la velocità di esecuzione del codice di circa il 30% dal primo lancio evitando passaggi di interpretazione e compilazione just-in-time (JIT) per i percorsi di codice inclusi.
Inviando un profilo di riferimento in un'app o in una libreria, Android Runtime (ART) è in grado di ottimizzare i percorsi di codice specificati tramite la compilazione AOT (Ahead-of-Time), fornendo miglioramenti delle prestazioni per ogni nuovo utente e ogni aggiornamento dell'app. Questa ottimizzazione guidata per i profili (PGO) consente alle app di ottimizzare l'avvio, ridurre i tempi di interazione e migliorare le prestazioni di runtime complessive per gli utenti sin dal primo lancio.
Questi miglioramenti delle prestazioni si traducono direttamente in metriche aziendali migliorate, come fidelizzazione utenti, transazioni e valutazioni. Per saperne di più sull'impatto del rendimento sulle metriche aziendali, leggi le notizie di Josh, Lyft, TikTok e Zomato.
Vantaggi dei profili di riferimento
I profili di riferimento rendono più fluide tutte le interazioni degli utenti, ad esempio l'avvio dell'app, l'esplorazione delle schermate o lo scorrimento dei contenuti sin dalla prima esecuzione. Aumentando la velocità e la reattività di un'app, i profili di riferimento possono generare un maggior numero di utenti attivi giornalieri e una percentuale media di visite di ritorno più elevata.
I profili Baseline aiutano a guidare l'ottimizzazione oltre l'avvio dell'app fornendo interazioni comuni degli utenti che migliorano il runtime dell'app sin dal primo lancio. La compilazione AOT guidata non si basa sui dispositivi utente e può essere eseguita una volta per release su una macchina di sviluppo anziché su un dispositivo mobile. Rilasciando le release con un profilo di riferimento, le ottimizzazioni delle app diventano disponibili molto più rapidamente rispetto ai soli profili Cloud.
Se non utilizzi un profilo Baseline, tutto il codice dell'app viene compilato in JIT dopo essere stato interpretato oppure scritto in un file odex
in background quando il dispositivo è inattivo. Dopo aver installato o aggiornato un'app, l'esperienza degli utenti non è ottimale dalla prima volta che la eseguono fino a quando i nuovi percorsi di codice non vengono ottimizzati.
Molte app misurano gli aumenti delle prestazioni di circa il 30% dopo l'ottimizzazione.
Profili di avvio
I profili di avvio sono simili ai profili di riferimento, ma la differenza è che vengono utilizzati al momento della compilazione anziché per l'ottimizzazione sul dispositivo. Un profilo di avvio viene utilizzato per ottimizzare il layout del file DEX al fine di migliorare i tempi di avvio.
Il codice identificato nel profilo di avvio viene inserito nel file classes.dex
principale, mentre l'altro codice viene inserito in file DEX separati. Questo migliora i tempi di avvio riducendo il numero di errori di pagina durante l'avvio dell'app. Per scoprire di più su come i profili di avvio e le ottimizzazioni del layout DEX possono migliorare i tempi di avvio delle app, consulta Ottimizzazioni del layout DEX e profili di avvio.
Inizia
Per iniziare a ottimizzare le prestazioni nella tua app esistente, vedi Creare profili di base di riferimento.
Numero minimo di versioni stabili consigliate
La catena di dipendenze fornisce versioni di release stabili e di sviluppo. Per generare e installare un profilo Baseline, utilizza le seguenti versioni supportate o successive del plug-in Android per Gradle, della libreria Macrobenchmark e del programma di installazione del profilo. Queste dipendenze sono necessarie in momenti diversi e funzionano insieme come toolchain per abilitare un profilo di riferimento ottimale.
- Plug-in Android per Gradle:
com.android.tools.build:8.0.0
- Libreria Macrobenchmark:
androidx.benchmark:benchmark-macro-junit4:1.2.2
- Programma di installazione del profilo:
androidx.profileinstaller:profileinstaller:1.3.1
Ti consigliamo di utilizzare la versione più recente di AGP per creare e gestire i profili di riferimento. Ecco le principali funzionalità delle diverse versioni di AGP:
Versione AGP | Funzionalità |
---|---|
8.3 |
|
8.2 |
|
con Android 8.0 | Versione minima consigliata: utilizza il plug-in Baseline Profile per Gradle per generare profili Baseline con una singola attività Gradle.
|
7,4 |
Versione minima supportata: le app possono consumare i profili Baseline dalle librerie e fornire il proprio profilo di riferimento nel file src/main/baseline-prof.txt .
|
Esempio di generazione del profilo
Di seguito è riportata una classe di esempio per creare un profilo di riferimento per l'avvio dell'app, nonché diversi eventi di navigazione e scorrimento utilizzando la libreria consigliata di Macrobenchmark:
@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()
}
}
}
Puoi vedere questo codice nel contesto completo e maggiori dettagli come parte dei nostri esempi di prestazioni su GitHub.
Cosa includere
Quando utilizzi i profili di riferimento in un'app, puoi includere il codice di avvio dell'app e le interazioni comuni degli utenti, come la navigazione tra le schermate o lo scorrimento. Puoi anche raccogliere interi flussi, ad esempio registrazione, accesso o pagamento. Qualsiasi percorso degli utenti che ritieni critico può trarre vantaggio dai profili Baseline migliorando le prestazioni di runtime.
Se stai sperimentando diversi approcci per migliorare il rendimento, valuta la possibilità di includere i profili di riferimento per entrambi i gruppi dell'esperimento. In questo modo, puoi semplificare l'interpretazione dei risultati assicurandoti che tutti gli utenti eseguano costantemente il codice compilato.
Le librerie possono fornire i propri profili di riferimento e fornire loro release per migliorare le prestazioni dell'app. Ad esempio, consulta la sezione Utilizzare un profilo di riferimento nelle prestazioni di Jetpack Compose.
Come funzionano i profili di riferimento
Durante lo sviluppo dell'app o della libreria, valuta la possibilità di definire i profili di riferimento per coprire le interazioni comuni degli utenti in cui la latenza o il tempo di rendering sono importanti. Ecco come funzionano:
Le regole del profilo leggibili vengono generate per la tua app e compilate in formato binario nell'app. Puoi trovarle in
assets/dexopt/baseline.prof
. Potrai quindi caricare l'AAB su Google Play come di consueto.Google Play elabora il profilo e lo invia direttamente agli utenti insieme all'APK. Durante l'installazione, ART esegue la compilazione AOT dei metodi nel profilo, determinando un'esecuzione più rapida dei metodi. Se il profilo contiene metodi utilizzati nell'avvio dell'app o durante il rendering dei frame, l'utente potrebbe riscontrare tempi di avvio più rapidi e interruzioni ridotte.
Questo flusso collabora con l'aggregazione dei profili Cloud per ottimizzare le prestazioni in base all'utilizzo effettivo dell'app nel tempo.

Profili Cloud
I profili Cloud offrono un'altra forma di PGO, aggregata da Google Play Store e distribuita per la compilazione del tempo di installazione, insieme ai profili di riferimento.
Sebbene i profili Cloud siano basati sulle interazioni reali degli utenti con l'app, dopo la distribuzione di un aggiornamento sono necessarie diverse ore o alcuni giorni per limitarne la disponibilità. Finché i profili non sono completamente distribuiti, le prestazioni dell'app non sono ottimali per gli utenti di app nuove o aggiornate. Inoltre, i profili cloud supportano solo i dispositivi Android con Android 9 (livello API 28) o versioni successive e scalano bene solo per le app che hanno una base utenti sufficientemente grande.
Comportamento della compilazione nelle versioni di Android
Le versioni della piattaforma Android utilizzano diversi approcci di compilazione delle app, ognuno con un compromesso in termini di prestazioni. I profili di riferimento migliorano rispetto ai precedenti metodi di compilazione fornendo un profilo per tutte le installazioni.
Versione di Android | Metodo di compilazione | Approccio all'ottimizzazione |
---|---|---|
Da 5 a 6 (livello API 21 fino a 23) | AOT completo | L'intera app viene ottimizzata durante l'installazione, con tempi di attesa lunghi per l'utilizzo, maggiore utilizzo di RAM e spazio su disco e tempi più lunghi per caricare il codice dal disco, con un conseguente aumento dei tempi di avvio a freddo. |
7 fino a 8.1 (API livello 24 fino a 27) | AOT parziale (profilo di riferimento) | I profili di riferimento vengono installati da androidx.profileinstaller alla prima esecuzione quando il modulo dell'app definisce questa dipendenza. ART può migliorare ulteriormente questo aspetto aggiungendo regole di profilo aggiuntive durante l'utilizzo dell'app e compilandole quando il dispositivo è inattivo. Questa opzione ottimizza lo spazio su disco e il tempo per caricare il codice dal disco, riducendo così il tempo di attesa per l'app. |
9 (livello API 28) e superiori | AOT parziale (base di riferimento + profilo Cloud) | Google Play utilizza i profili di riferimento durante le installazioni di app per ottimizzare l'APK e i profili Cloud, se disponibili. Dopo l'installazione, i profili ART vengono caricati su Play, aggregati e poi forniti come profili Cloud ad altri utenti quando installano o aggiornano l'app. |
Soluzioni per possibili problemi
Di seguito sono riportati i possibili problemi e le relative soluzioni o i problemi per i quali sono in corso sviluppi per soluzioni alternative:
I corsi rimossi in seguito non sono inclusi nei profili di riferimento. Potrebbero mancare classi eliminate perché vengono aggiunte all'APK finale da un processo di compilazione separato che non supporta i profili di riferimento. Questo problema è stato risolto in Android Studio Iguana Canary 8 (problema n. 283947063).
La reimpostazione delle cache del profilo ART non è consentita su
user
build (non rooted). Per risolvere questo problema,androidx.benchmark:benchmark-macro-junit4:1.1.0
include una correzione che reinstalla l'app durante il benchmark (problema).I Profiler di Android Studio non installano i profili di riferimento durante la profilazione dell'app (problema).
I sistemi di build non-Gradle, come Bazel o Buck, non supportano la compilazione dei profili di riferimento negli APK di output.
I canali di distribuzione delle app diversi dal Google Play Store potrebbero non supportare l'utilizzo dei profili di riferimento al momento dell'installazione. Gli utenti delle app installate tramite questi canali non ne vedono i vantaggi fino a quando non viene eseguito dexopt in background, il che è probabilmente durante la notte.
Le ottimizzazioni della batteria possono interferire con l'installazione del profilo. Per assicurarti che i profili vengano installati in modo efficace, disattiva le ottimizzazioni della batteria nei dispositivi di benchmark.
I miglioramenti delle prestazioni possono variare tra i benchmark e la produzione. Questo accade perché i benchmark locali misurano il rendimento con i profili di riferimento abilitati o disabilitati. In un'app di produzione, la misurazione è incrementale quando si aggiunge una nuova parte dell'app a un profilo di riferimento, dove le parti sono già profilate tramite raccolte aggiuntive.
Risorse aggiuntive
Consigliato per te
- Nota: il testo del link viene visualizzato quando JavaScript è disattivato
- Crea profili di riferimento {:#Creating-profile-rules}
- Creare e misurare profili di riferimento senza Macrobenchmark
- Ottimizzazioni del layout DEX e profili di avvio