I profili di riferimento migliorano la velocità di esecuzione del codice di circa il 30% dal primo lancio evitando i passaggi di interpretazione e di compilazione just-in-time (JIT) per i percorsi del codice inclusi.
Se invii un profilo di riferimento in un'app o una libreria, il runtime Android (ART) può ottimizzare percorsi di codice specifici tramite la compilazione Ahead-of-Time (AOT), offrendo miglioramenti delle prestazioni per ogni nuovo utente e ogni aggiornamento dell'app. Questa ottimizzazione guidata dal profilo (PGO) consente alle app di ottimizzare l'avvio, ridurre i problemi di interazione e migliorare le prestazioni complessive del runtime per gli utenti fin dal primo avvio.
Questi miglioramenti delle prestazioni portano direttamente a metriche aziendali migliorate come fidelizzazione utenti, transazioni e valutazioni. Puoi scoprire di più su come le prestazioni influiscono sulle metriche aziendali nelle storie di Josh, Lyft, TikTok e Zomato.
Vantaggi dei profili di riferimento
I profili di riferimento rendono più fluide tutte le interazioni utente, come l'avvio dell'app, la navigazione tra le schermate o lo scorrimento dei contenuti, fin dalla prima esecuzione. Aumentando la velocità e la reattività di un'app, i Profili di riferimento possono portare a un aumento degli utenti attivi giornalieri e a un tasso di visite di ritorno medio più elevato.
I profili di riferimento aiutano a guidare l'ottimizzazione oltre l'avvio dell'app fornendo interazioni comuni degli utenti che migliorano il runtime dell'app sin dal primo avvio. La compilazione AOT guidata non si basa sui dispositivi degli utenti e può essere eseguita una volta per release su una macchina di sviluppo anziché su un dispositivo mobile. Inviando le release con un profilo di base, le ottimizzazioni delle app diventano disponibili molto più velocemente rispetto all'utilizzo dei soli profili Cloud.
Se non utilizzi un profilo di riferimento, tutto il codice dell'app viene compilato in modalità JIT in memoria
dopo essere stato interpretato o scritto in un file odex
in background quando il
dispositivo è inattivo. Dopo aver installato o aggiornato un'app, gli utenti hanno un'esperienza suboptimale 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 in fase di 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 riduce i tempi di avvio riducendo il numero di errori di pagina durante l'avvio dell'app. Per ulteriori informazioni su come i profili di avvio e le ottimizzazioni del layout DEX possono migliorare i tempi di avvio dell'app, consulta Ottimizzazioni del layout DEX e profili di avvio.
Inizia
Per iniziare a ottimizzare il rendimento nella tua app esistente, consulta Creare profili di riferimento.
Versioni stabili minime consigliate
La catena di dipendenze fornisce versioni di release stabili e di sviluppo. Per generare e installare un profilo di riferimento, utilizza le seguenti versioni supportate o superiori del plug-in Android per Gradle, della libreria Macrobenchmark e di Profile Installer. Queste dipendenze sono necessarie in momenti diversi e agiscono insieme come toolchain per attivare 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.3.3
- Programma di installazione del profilo:
androidx.profileinstaller:profileinstaller:1.4.1
Ti consigliamo di utilizzare la versione più recente di AGP per creare e gestire i profili di riferimento. Di seguito sono riportate le funzionalità principali fornite nelle diverse versioni di AGP:
Versione AGP | Funzionalità |
---|---|
8.4 | Installazioni di app locali di build non di cui non è possibile eseguire il debug utilizzando lo strumento a riga di comando del wrapper Gradle o i profili di riferimento di installazione di Android Studio, in modo che le prestazioni della build di release locale corrispondano maggiormente alla produzione. Questo aggiornamento non influisce sulle prestazioni di produzione dei profili di riferimento. |
8.3 |
|
8.2 |
|
8.0 | Versione minima consigliata: utilizza il plug-in Gradle Baseline Profile per generare profili di riferimento con un'unica attività Gradle.
|
7,4 |
Versione di base supportata:le app possono utilizzare i profili di riferimento dalle librerie e fornire il proprio profilo di base 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 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 visualizzare questo codice nel contesto completo e con maggiori dettagli nell'ambito dei nostri esempi di rendimento 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, come registrazione, accesso o pagamento. Tutti i percorsi utente che ritieni importanti possono trarre vantaggio dai profili di riferimento migliorando le prestazioni di runtime.
Se stai sperimentando approcci diversi per migliorare il rendimento, prendi in considerazione l'inclusione dei profili di riferimento per entrambi i gruppi dell'esperimento. In questo modo, puoi semplificare l'interpretazione dei risultati assicurandoti che tutti i tuoi utenti eseguano in modo coerente il codice compilato.
Le librerie possono fornire i propri profili di base e fornire release per migliorare le prestazioni delle 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, ti consigliamo di definire i profili di riferimento per coprire le interazioni utente comuni in cui il tempo di rendering o la latenza sono importanti. Ecco come funzionano:
Per la tua app vengono generate regole del profilo leggibili, che vengono compilate in formato binario all'interno dell'app. Puoi trovarle in
assets/dexopt/baseline.prof
. Dopodiché potrai 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, velocizzandone l'esecuzione. Se il profilo contiene metodi utilizzati all'avvio dell'app o durante il rendering dei frame, l'utente potrebbe riscontrare tempi di avvio più rapidi e una riduzione del jitter.
Questo flusso collabora con l'aggregazione di Cloud Profiles per ottimizzare il rendimento in base all'utilizzo effettivo dell'app nel tempo.
Profili cloud
I profili Cloud offrono una forma aggiuntiva di PGO, aggregata per Google Play Store e distribuita per la compilazione al momento dell'installazione, insieme ai profili di base di riferimento.
Sebbene i profili Cloud siano basati sulle interazioni reali degli utenti con l'app, la distribuzione di un aggiornamento richiede diverse ore o giorni, limitando la disponibilità. Finché i profili non sono completamente distribuiti, le prestazioni delle 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 ampia.
Comportamento delle compilation nelle versioni di Android
Le versioni della piattaforma Android utilizzano approcci di compilazione delle app diversi, ciascuno con un compromesso sul rendimento corrispondente. I profili di riferimento migliorano i metodi di compilazione precedenti 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 conseguente lunghi tempi di attesa per l'utilizzo dell'app, aumento dell'utilizzo della RAM e dello spazio su disco e tempi più lunghi per caricare il codice dal disco, con un potenziale aumento dei tempi di avvio a freddo. |
7 fino ad Android 8.1 (livello API da 24 a 27) | AOT parziale (profilo di base) | 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 altre regole del profilo durante l'utilizzo dell'app e compilandole quando il dispositivo è inattivo. In questo modo, viene ottimizzato lo spazio su disco e il tempo necessario per caricare il codice dal disco, riducendo così il tempo di attesa per l'app. |
9 (livello API 28) e successive | AOT parziale (base di riferimento + profilo cloud) | Play utilizza i profili di riferimento durante le installazioni di app per ottimizzare gli APK e i profili Cloud, se disponibili. Dopo l'installazione, i profili ART vengono caricati su Google Play, aggregati e quindi forniti come profili Cloud agli altri utenti quando installano o aggiornano l'app. |
Problemi noti
Di seguito sono riportati alcuni possibili problemi e soluzioni, o problemi per i quali sono in corso sviluppi di soluzioni alternative:
La generazione del profilo di riferimento potrebbe non riuscire a causa delle impostazioni di autorizzazione su alcuni dispositivi, inclusi i dispositivi OnePlus. Per aggirare questo problema, disattiva l'opzione Disattiva il monitoraggio delle autorizzazioni nelle impostazioni delle Opzioni sviluppatore.
La generazione del profilo di riferimento non è supportata sui dispositivi Firebase Test Lab, inclusi i dispositivi Test Lab gestiti da Gradle (issue #285187547).
Per fornire profili di riferimento per le librerie, utilizza almeno il plug-in Gradle Baseline Profile 1.2.3 o AGP 8.3 (issue #313992099).
Se generi profili di riferimento con il comando
./gradlew app:generateBaselineProfile
, vengono eseguiti anche i benchmark nel modulo di test e i risultati vengono ignorati. In questo caso, puoi generare solo i profili di riferimento eseguendo il comando con-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
. Questo problema è stato risolto in AGP 8.2.Il comando per generare profili di baseline per tutti i tipi di build,
./gradlew app:generateBaselineProfile
, genera profili di baseline solo per il tipo di build della release. Questo problema è stato risolto in AGP 8.1.I canali di distribuzione delle app non 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 finché non viene eseguito dexopt in background, probabilmente durante la notte.
La condivisione interna delle app nel Play Store non supporta i profili di riferimento, ma il canale di test interno sì.
Le ottimizzazioni della batteria su alcuni dispositivi, come quelli Huawei, possono interferire con l'installazione del profilo. Per contribuire a garantire l'installazione efficace dei profili, disattiva eventuali ottimizzazioni della batteria nei dispositivi di benchmark.
Risorse aggiuntive
Consigliati per te
- Nota: il testo del link viene visualizzato quando JavaScript è disattivato
- Crea profili di base {:#create-profile-rules}
- Creare e misurare i profili di riferimento senza Macrobenchmark
- Ottimizzazioni del layout del file DEX e profili di avvio